home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr11 / pdox693.zip / MAY93DOS.MSG < prev    next >
Text File  |  1993-06-08  |  327KB  |  7,814 lines

  1. #: 228702 S1/New Users/Misc ·
  2.     20-May-93  09:04:47
  3. Sb: #228631-blobs editor problem
  4. Fm: Harry Goldman (TeamB) 75300,1733
  5. To: Yiu Shih Lee 72360,1005 (X)
  6.  
  7. Start Paradox with the command line option -NoRealHeap
  8.  
  9. #: 228804 S1/New Users/Misc ·
  10.     20-May-93  16:59:59
  11. Sb: Paradox 4.0 Job Availabl
  12. Fm: Jim Clokey 70404,151
  13. To: All
  14.  
  15. There is a consultant position available in NYC.  Following is all that I know
  16. about it:  Requires Paradox 4.0 experience including explicit experience with
  17. multi-user network systems, knowledge of Quattro PRO,  knowledge of Mouse
  18. Features.  Position is with a NYC agency for a, more or less, 6 month period.
  19. Rate is in th $30 to $40 per hour range.  I can not answer any other
  20. questions, but if you will FAX your resume to me at (908) 221-3825, I will
  21. forward it to the broker firm if it demonstartes these minimum requirements.
  22.  
  23. #: 229103 S1/New Users/Misc ·
  24.     22-May-93  09:35:35
  25. Sb: #228693-Paradox 40 Book??
  26. Fm: Harry Goldman (TeamB) 75300,1733
  27. To: Martha Kent 72360,414
  28.  
  29. Yes, My company - DataBase Designs, Inc. sells two books:
  30.  
  31. "The Paradox 4.0 Developers Guide" by Greaves and Lindsy. (Includes a sample
  32. disk and a copy of R&R report writer). Retail $44.95. Our price $30.00. IF
  33. you live in the state of IL add $2.40 sales tax. S/H is $3.00.
  34.  
  35. Thus in state the total price is $35.40.
  36.  
  37. Out of state the total price is $33.00
  38.  
  39. The other book we sell is "Inside Paradox For Windows" by Richard Wagner
  40. (member of TeamB). The same pricing applies.
  41.  
  42. You can send us a check and we will be happy to send you as many copies as
  43. you want. We will also be happy to send it to you COD, but then we will need
  44. to charge you the COD price too. (should be about $4.00 I think.)
  45.  
  46. We have plenty of copies in stock.
  47.  
  48. Harry Goldman
  49. DataBase Designs, Inc.
  50. 450 Caren Dr.
  51. Buffalo Grove, IL    60089
  52.  
  53. (Voice)  708-634-9355
  54. (Fax)    708-634-9357
  55.  
  56. #: 229122 S1/New Users/Misc ·
  57.     22-May-93  13:13:10
  58. Sb: #229053-Paradox 4.0 .NET file
  59. Fm: Dan Ehrmann (TeamB) 70007,4644
  60. To: andrew spears 70143,1152
  61.  
  62. You need to reconfigure QuattroPro to recognize the PARADOX.NET file location
  63. that Paradox is using.
  64.  
  65. To start, run the NUPDATE program in the Paradox directory, and make sure you
  66. have a PARADOX.NET file location defined.  You may need to set the Network
  67. Type = "Other".
  68.  
  69. Then run QPro and somewhere on the Options menu is a dialog to configure
  70. Paradox interop, including the location for the network control file.
  71.  
  72. You should have only **1** PARADOX.NET, but you will have .LCK files in every
  73. subdirectory where tables are being accessed.  Just ignore 'em.
  74.  
  75. #: 229646 S1/New Users/Misc ·
  76.     25-May-93  12:45:36
  77. Sb: PDOX PRINTING SCREENS
  78. Fm: Lynn Alfano 72170,355
  79. To: SYSOP (X)
  80.  
  81. About 3 weeks ago I asked about a problem we have here where some Paradox 4.01
  82. users are unknowlingly having everything they do in the DOS shell print out on
  83. the network printers.  We have Netware 3.11 with DOS 5.0 clients.  I have some
  84. more information about the problem.
  85.  
  86. In DOS, there is a control-P command which sends all screen output to the PRN
  87. device until control-P is entered again to toggle it off.  I can't even find
  88. documentation about control-P in the DOS manual.
  89.  
  90. Well, it seems somehow, when our Paradox users execute "something", this DOS
  91. control-P feature gets turned on.  Subsequently, every time they go into
  92. Pal-Edit from Paradox, shell out to DOS, or use an "NPRINT" command from with
  93. PAL, the output goes to the printer.  When the users exits Paradox, the
  94. control-P is still set.  When they try and log off the network, they get an
  95. "error writing to device PRN, abort or retry?" message.  This is, of course,
  96. because their LPT1's are no longer captured by Netware and directed to a
  97. Netware printer.
  98.  
  99. This "something" that Paradox executes that turns control-P on could be some
  100. PAL printer command, or it could be Pal-Edit (which has its own separate
  101. control-P command) or it could be something else entirely.
  102.  
  103. Please provide any insight you can to this.  You wouldn't believe the amount
  104. of paper and toner that's wasted here because users don't know all this
  105. garbage is coming out down the hall.
  106.  
  107. Fm: Harry Goldman (TeamB) 75300,1733
  108.  
  109.    [Ctrl] [P] is an OLD OLD command in DOS, I think its been around since
  110.    1.0.  It is not commonly used, and that may be why you couldn't find
  111.    it in the manuals.
  112.  
  113.    It sounds like there is a memory conflict between PDOX and something else
  114.    you have loaded on your machines. Try reducing CONFIG.SYS to FILES and
  115.    BUFFERS, and the AUTOEXEC.BAT to PATH and PROMPT. Go into PDOX, does the
  116.    problem persist ? The only other way that I can think of that this would
  117.    happen is if the user is actually pressing [Ctrl][P] in a DOS session.
  118.  
  119. #: 229678 S1/New Users/Misc ·
  120.     25-May-93  16:01:01
  121. Sb: Using calculated fields
  122. Fm: Byron Snedaker 71101,2405
  123. To: sysops (X)
  124.  
  125. I currently have two summary fields in a report. One that shows the sum per
  126. group
  127. and one that shows the overall sum.  I want to divide the sum per group value
  128. by the overall value and post it to each group to show a percentage of the
  129. overall total. Problem is that the overall value isn't generate until the end
  130. of the report.  Is there another way around this?
  131.  
  132. Fm: Steve Erbach (NEWPALS) 70620,3432
  133.  
  134.    There are (at least) two methods:
  135.  
  136.    1)  Pre-calculate the overall sum in a query before you run the report
  137.        and assign the resulting sum to a PAL variable.  Modify your report
  138.        to utilize the PAL variable in a calculated field to get the
  139.        percentage you want.  For example, your query produces the quantity
  140.        45,678 for the sum of all values in the column in question.  Assign
  141.        the sum to the variable sum.n.  Then in your report design, place a
  142.        calculated field in the Group Footer something like this:
  143.        100*SUM([Field A],GROUP)/sum.n.
  144.  
  145.    2)  Instead of pre-calculating the sum, you can use the CSUM function in
  146.        the Group Footer's calculated field:  100*SUM([Field
  147.        A],GROUP)/CSUM("Yourtabl","Field A")
  148.  
  149.    Either one should do it.
  150.  
  151. #: 229878 S1/New Users/Misc ·
  152.     26-May-93  12:51:53
  153. Sb: Network Printing
  154. Fm: Andrew Sweet 71127,2346
  155. To: ALL
  156.  
  157. I'm writing a Paradox 4.0 application for invoices that I would like to print
  158. on a remote printer down the hall. My application is designed to print each
  159. invoice one at a time. I am using the "Pserver"and "Capture" utilities from
  160. Netware 3.11. I'm having one slight problem.  My invoices are not printing
  161. individually as they are created - instead, they are printed all at once after
  162. I exit Paradox.
  163. How can I set up my application (or perhaps my capture statement) in such a
  164. way that each invoice is printed as it is created?
  165.  
  166. Fm: Jonathan Goldman 70441,572
  167.  
  168.    On your capture line include the parameter TI=15.  This will tell Novell
  169.    to wait 15 seconds after output has stopped in a print job and then
  170.    close it so it can print.
  171.  
  172.    You could also use "RUN CAPTURE" from Paradox after the report.
  173.  
  174. Fm: David Chu (Sysop) 71333,121
  175.  
  176.    I'm not a real guru on Novell, but here is some of what I DO know.  On
  177.    your capture statement, make sure you have a short timeout value being
  178.    set.  An example would be:
  179.  
  180.       capture q=printserver ti=15
  181.  
  182.    The ti=15 is setting a time out value of 15 seconds.  This means, if
  183.     there is a pause of 15 seconds during a print job, the printserver will
  184.     assume the job is done and will print the job automatically.  This way,
  185.    as long as there is a 15 second pause, the current print job will
  186.    automatically print.  (You will want to stay away from ti=0 and the na
  187.    parameter because this will cause printjobs to remain in the queue until
  188.    another capture command is issued or an endcap command is issued.)
  189.  
  190. #: 230055 S1/New Users/Misc ·
  191.     27-May-93  12:02:20
  192. Sb: DLG BOX & FIELDVIEW
  193. Fm: RANDY SINCLAIR 76450,1507
  194. To: SYSOP (X)
  195.  
  196. Is it possible to move an active dialog box out of sight?  My dialog proc
  197. invokes
  198. fieldview on an off-screen memo field, but I am unable to place the resulting
  199. window above the dialog box which called it.  Nor am I able to move the dialog
  200. box temporarily off_screen.
  201.  
  202. Fm: Brian Bushay (TeamB) 76711,516
  203.  
  204.    >Is it possible to move an active dialog box out of sight?  My dialog
  205.     proc >invokes
  206.  
  207.    Yes you can move a Dialogbox With the Window Move command.  You need to
  208.    get its handle and will have to use
  209.  
  210.    Window Handle Dialog to handle   to get it.
  211.  
  212. #: 230178 S1/New Users/Misc ·
  213.     28-May-93  01:44:41
  214. Sb: strike-out characters
  215. Fm: richard lewis 71534,2077
  216. To: sysop (X)
  217.  
  218. Does anyone know how to get Paradox to produce text with strike-out
  219. characters, like you see in legal or legislative documents?
  220.  
  221. Fm: Brian Bushay (TeamB) 76711,516
  222.  
  223.    That would require that the Text be printed twice, the second time with
  224.    the strike over character.  Depending on what type of printer your
  225.    using you will have to make it backup then print the strike over
  226.    characters.
  227.  
  228. Fm: Ted Heatherington 76520,2366
  229.  
  230.    The question is highly dependent on your printer's ability to print
  231.     backspace (ASCII 08); if your printer does it, simply print the first
  232.    character, an ASCII literal 08, and your second character, ie a hyphen.
  233.  
  234.    You should be able to do strings _on one line_ by printing the string,
  235.     issuing enough 08's to move back over the line, then print your second
  236.    pass.
  237.  
  238.    This _will not_ work if you are not using a fixed-pitch font, though.
  239.  
  240. Fm: Richard M. Boddy 72650,2457
  241.  
  242.    You might try downloading TI 478 "Changing Printer Charasterics in a Paradox
  243.    report."  If your printer manual gives you the codes for a strikeout character
  244.    this may help solve the problem.
  245.  
  246.    If not, Brian has a good idea.  Hope it works out!
  247.  
  248. #: 230312 S1/New Users/Misc ·
  249.     28-May-93  21:17:25
  250. Sb: LIMS
  251. Fm: Daniel J. Hoch 71542,34
  252. To: sysop (X)
  253.  
  254. I just finished reading C&E News 5/24/93.  They reference a Paradox Based LIMS
  255. shareware program.  I am very interested in this.  Is it available through
  256. Compuserve?  If anyone has any info please contact me.
  257.  
  258. #: 230530 S1/New Users/Misc ·
  259.     31-May-93  16:10:43
  260. Sb: blob fields
  261. Fm: Randal Hundley 73520,1456
  262. To: sysop
  263.  
  264. I have a database for my cardiology patients, and we use wordperfect for
  265. medical recordkeeping on these patients--one wp file per patient.  I'd like to
  266. incorporate the wordprocessing into a blob field in paradox, so that we limit
  267. the number of files (now there are thousands of patient files), and access the
  268. wordperfect files by looking up the pt record in pdox and then editing the
  269. blob wp file.
  270.  
  271. Is this practicable?  Would the blob editor (wp) have to be loaded each and
  272. every time we go to a different pateint and load that patient's wp file
  273. through paradox?  I wouldn't want to have to reload wordperfect each time we
  274. changed pateint records.  Would WP have full functionality, eg soft fonts,
  275. printing, copying from other files,  etc?
  276.  
  277. Would os/2 or Desqview allow for better functionality with this system?  If
  278. this would work, it would sure be great, but beforing asking my Paradox
  279. developer to work on it I wanted your input.
  280.  
  281. Fm: Don Schubert (TeamB) 70007,4654
  282.  
  283.    WP would only get loaded only if you wanted to view/edit the BLOB field.
  284.  
  285. Fm: Steve Erbach (NEWPALS) 70620,3432
  286.  
  287.    >> Is this practicable?  Would the blob editor (wp) have to be loaded each and
  288.    every time we go to a different pateint and load that patient's wp file
  289.    through paradox?  I wouldn't want to have to reload wordperfect each time we
  290.    changed pateint records.  Would WP have full functionality, eg soft fonts,
  291.    printing, copying from other files,  etc?  Would os/2 or Desqview allow for
  292.    better functionality with this system? <<
  293.  
  294.    Yes it's practicable and yes WordPerfect would have to be loaded each and
  295.    every time you go to a different patient.  Yes, WordPerfect would have full
  296.    functionality w/soft fonts, printing, etc.
  297.  
  298.    There's a trade-off between using the BLOb editor technique in Paradox and the
  299.    OS/2 or Desqview (or, for that matter, Windows) technique:  Paradox allows you
  300.    to "point-and-shoot" at the document you want to edit.  Granted, WordPerfect
  301.    has to load up itself as well as the document, but the amount of time taken to
  302.    do so is really not any different from using a multi-tasking operating system
  303.    where you have to pop out of one program into another and then _manually_ call
  304.    up the document you want to work on.
  305.  
  306.    The Paradox method stores all the documents in one file.  The multi-tasking OS
  307.    method stores documents in individual files.  You mentioned that there are
  308.    thousands of patients, well you'll have thousands of documents on disk.
  309.  
  310.    Perhaps if you went to all-Windows versions of the software you could figure
  311.    out some DDE or OLE way to flop in and out of Paradox for Windows and
  312.    WordPerfect for Windows while still maintaining the one file Paradox storage
  313.    method.
  314.  
  315. Fm: Don Schubert (TeamB) 70007,4654
  316. To: Steve Erbach (NEWPALS) 70620,3432
  317.  
  318.    >>Yes it's practicable and yes WordPerfect would have to be loaded each and
  319.    every time you go to a different patient.  Yes, WordPerfect would have full
  320.    functionality w/soft fonts, printing, etc.<<
  321.  
  322.    Yes, but ONLY if you are looking at that blob field. I shouldn't think that
  323.    would be the case every time a patient record was accessed. Can you imagine
  324.    what it would be like if the blob editor was loaded each time you scrolled to
  325.    a new record <grin>?
  326.  
  327.    Perhaps viewing the blob field was what Randal had in mind. It wasn't clear
  328.    from his msg.
  329.  
  330. Fm: Randal Hundley 73520,1456
  331. To: Don Schubert (TeamB) 70007,4654
  332.  
  333.    thanks for your thoughts and replies here.  In the scenario I imagined,
  334.    doctors and nurses would frequently look up patients in paradox and view/edit
  335.    fields other than the blob field.  For some users, looking at blobs would be a
  336.    rarity.  For the transcriptionists in the office, who do nothing but type in
  337.    wordperfect, they would pretty much load wp to use their WP (blob).  The whole
  338.    point of my idea is to have all our information in one place.
  339.    I'm a cardiologist, and with a pdox developer (David McBride), we have
  340.    developed a wonderful clinically oriented database which stores much
  341.    inforamtion about patients, procedures done, outcomes, scheduled followups,
  342.    etc.  Our formal medical recordkeeping, is on paper and in wordperfect.  I
  343.    devote a huge effort to keeping a detailed problem list on every patient's
  344.    chart, and this gets updated (in WP) each time something important happens to
  345.    the patient.  Wouldn't it be great to be able to access that problem list from
  346.    within paradox?   This is my objective--putting it all-the database and the
  347.    transcription-under one roof----namely, Paradox.    It sounds like it is very
  348.    dooable, but (1) secretaries would have to load and unload wordperfect each
  349.    time they moved to a different patient, and (2) the .db file would be
  350.    huge!!!!!  Loading wp takes only a moment, but from a hardware perspective is
  351.    there a problem with loading the same big file from disk many times each day?
  352.    (eg wear and tear).  The benefit to the secretaries would be that they would
  353.    no longer have to search for patient files--they would all be in the big
  354.    database.
  355.  
  356. Fm: Steve Erbach (NEWPALS) 70620,3432
  357. To: Randal Hundley 73520,1456
  358.  
  359.    >> It sounds like it is very dooable, but (1) secretaries would have to load
  360.    and unload wordperfect each time they moved to a different patient, and (2)
  361.    the .db file would be huge!!!!! Loading wp takes only a moment, but from a
  362.    hardware perspective is there a problem with loading the same big file from
  363.    disk many times each day?  (eg wear and tear). <<
  364.  
  365.    With that small correction from Herr Schubert, we can focus on just what each
  366.    of your staff needs to do.  Transcriptionists would all be mostly in
  367.    WordPerfect, using Paradox just to locate the proper document; everyone else
  368.    would be more concerned with the patient data.
  369.  
  370.    As you point out, loading (and unloading) WordPerfect takes only a moment.
  371.    There is really no hardware problem at all.  There is _less_ "wear and tear"
  372.    loading word processing files since they would be in memory entirely unless
  373.    you have inordinately large documents.  Then there would be some (emphasis
  374.    _some_) disk access.
  375.  
  376.    The WordPerfect documents would actually be stored in an .mb file, not the
  377.    .db.  Yes, it could get large.  Again, that is no problem since Paradox can
  378.    manage up to 256 MB of BLObs _per table_.  Now's the time for that 1 GB drive
  379.    you've been ogling!
  380.  
  381. Fm: Don Schubert (TeamB) 70007,4654
  382. To: Randal Hundley 73520,1456
  383.  
  384.    Two things. You should have your secretaries also save to a second wp file
  385.    outside of pdox for extra backup and access outside of pdox. Second, at the
  386.    end of the day, the table containing the blob should be packed/restructured.
  387.    There is a bit of bloat each time a blob is viewed. In general most of the
  388.    blob is stored in the binary file, so the the master .db shouldn't get that
  389.    much larger (except for the foregoing).
  390.  
  391. Fm: Brian Bushay (TeamB) 76711,516
  392. To: Randal Hundley 73520,1456
  393.  
  394.    >Is this practicable?
  395.    Yes It should be
  396.  
  397.    >Would the blob editor (wp) have to be loaded each and
  398.    >every time we go to a different pateint and load that patient's wp file
  399.    >through paradox?
  400.    Yes that is the way a blob editor works
  401.    >Would WP have full functionality, eg soft fonts,
  402.    >printing, copying from other files,  etc?
  403.    Yes.
  404.  
  405.    >Would os/2 or Desqview allow for better functionality with this system?  If
  406.    >this would work, it would sure be great, but beforing asking my Paradox
  407.    >developer to work on it I wanted your input.
  408.  
  409.    These should allow you to keep WP loaded in another window, I an not sure
  410.    how you would handle switching Windows.
  411.  
  412. Fm: David Berg (Borland) 73020,374
  413. To: Randal Hundley 73520,1456
  414.  
  415.    See other notes first.
  416.  
  417.    While using DesqView, OS/2 or Windows for multi-tasking will work, you will
  418.    have issues coordinating everything.  It might be easier to take some of the
  419.    extra memory you'd be using under those approaches and use it for an external
  420.    disk cache.  This would result in most of WP being in memory and a fairly fast
  421.    load.
  422.  
  423.    A lot depends on how often you need to call up the attached memos.
  424.  
  425.    If you always need to call up the information, then Paradox Windows might be a
  426.    better solution.
  427.  
  428.    You might want to do some tests with various arrangements to see what works
  429.    best for your specific situation.
  430.  
  431. #: 230533 S1/New Users/Misc ·
  432.     31-May-93  16:45:18
  433. Sb: Runtime Mtce Avail Date?
  434. Fm: Virginia B. Sauer 72607,3335
  435. To: All
  436.  
  437. My former boss just ordered Paradox 4 Runtime for DOS to create more room
  438. on a hard drive.  (Do _NOT_ ask me why he thought that _ADDING_ the
  439. runtime version would create more disk space, particularly since the PC was
  440. already connected to a LAN offering a multi-user version of the application
  441. needed.)
  442.  
  443. The order was processed on May 10th, and he received version 4.0, with all
  444. files dated 1992.  Since all Paradox 4 DOS applications are written in 4.01,
  445. we obviously need the runtime version to be the same.
  446.  
  447. The vendor maintains that no maintenance releases were available for
  448. Runtime as of May 10th (i. e., _neither_ 4.01 or 4.02), and that it is
  449. therefore our tough luck and we must send Borland $ 15 if we want the
  450. maintenance release.
  451.  
  452. Since we have already paid this particular vendor several hundred thousand
  453. dollars so far this year, he obviously has a lot to learn about customer
  454. service, and my personal recommendation is to change vendors <g>.
  455.  
  456. However, we would like to be able to confirm whether or not a runtime
  457. maintenance release was available as of May 10th.
  458.  
  459. Likewise, we do not want to be unreasonable, but had been under the
  460. impression that a vendor should provide maintenance releases if available
  461. at the time of purchase (particularly when asked), so would also greatly
  462. appreciate any feedback on what consitutes standard business practice in
  463. this area.
  464.  
  465. Thank you very much for any help you can provide.
  466.  
  467.                                                Regards,
  468.                                                   Virginia
  469.  
  470. Fm: Don Schubert (TeamB) 70007,4654
  471.  
  472.    Runtime 4.01 should certainly have been available well before 5/10. You
  473.    could check the announcements (a;1 from the ! prompt) to get an
  474.    educated guess of the nearest weekday Runtime 4.02 was available.
  475.  
  476.    Vendors are sloppy and don't keep up with this stuff as a rule (although
  477.    they should).
  478.  
  479.    Dump your vendor.
  480.  
  481.    Is this your notorious ex-boss <g>? Someone should confiscate his
  482.    computer.
  483.  
  484.    Don
  485.  
  486. Fm: Virginia B. Sauer 72607,3335
  487. To: Don Schubert (TeamB) 70007,4654 (X)
  488.  
  489.    Don -
  490.  
  491.    _MANY_ thanks for your helpful response (as always).
  492.  
  493.    I was confident that Runtime 4.01 had been available before May 10th,
  494.    but needed some form of confirmation.
  495.  
  496.    And I fully agree that changing vendors should be our first priority.
  497.    Although I can readily understand their not being aware of a maintenance
  498.    release, when a customer specifically asks about it (at the time of the
  499.    order), it is not acceptable to be told that that is our tough luck and
  500.    we must send Borland $ 15 if we want a copy.  Moreover, since we have
  501.    already paid this vendor several hundred thousand dollars so far this
  502.    year, it does seem somewhat tacky to refuse to absorb $ 15 to give us
  503.    the correct version.
  504.  
  505.    Now, how did you ever guess that this was the same ex-boss who
  506.    decided to _edit_ the custom script the first time he saw Paradox
  507.    (ignoring my pitiful bleating and insisting that he could figure out
  508.    which encrypted characters to change) - after which the entire LAN had
  509.    to be reinstalled?  Actually, the man is brilliant, and does splendidly
  510.    so long as discussions remain theoretical ... Just don't let him
  511.    actually _touch_ anything <g>.  (My current boss is _perfect_.)
  512.  
  513.    Take care, and _THANKS_ _AGAIN_.
  514.  
  515.                                                           Regards,
  516.                                                                Ginny
  517.  
  518. Fm: Don Schubert (TeamB) 70007,4654
  519. To: Virginia B. Sauer 72607,3335
  520.  
  521.    My pleasure, Ginny. And pay no attention to that Brain guy. The skeeters
  522.    have gotten to him, I suspect...
  523.  
  524.    DOn
  525.  
  526. Fm: Virginia B. Sauer 72607,3335
  527. To: Brian Bushay (TeamB) 76711,516 (X)
  528.  
  529.    Brian -
  530.  
  531.    Actually, I do not believe that this was a "special order", since the
  532.    person placing the order merely wanted to increase the available disk
  533.    space on a hard drive.  (I _TOLD_ you not to ask me why he thought
  534.    that _ADDING_ Runtime was going to accomplish this <g>.)
  535.  
  536.    The first _I_ heard of it was when the little treasure arrived, and I
  537.    immediately asked why it was not 4.02.  Had it been a special order, I
  538.    believe that they would have first come to me.
  539.  
  540.    We have a new CIO.  Since hitting the "big red switch" is particularly
  541.    nasty with multi-user applications, and I track each user's entry and
  542.    "correct" exit, I was thinking in terms of a flashing red message the
  543.    next time guilty parties log on, blinking:
  544.          -------------------------------------------------------
  545.          | YOU DID NOT EXIT THE SYSTEM CORRECTLY ON _________. |
  546.          |                                                     |
  547.          |       PLEASE CONTACT _______ TO DETERMINE HOW       |
  548.          |       MUCH CORPORATE DATA YOUR ACTIONS ERASED.      |
  549.          -------------------------------------------------------
  550.    Think it would work?
  551.  
  552.    Seriously, _MANY_ thanks for _ALL_ of your help (as always).
  553.  
  554.                                                 Regards,
  555.                                                    Virginia
  556.  
  557. Fm: Virginia B. Sauer 72607,3335
  558. To: Brian Bushay (TeamB) 76711,516
  559.  
  560.    Brian -
  561.  
  562.    << Require the user to fill out a two page form (all fields required). >>
  563.  
  564.    I like your style!  (And perhaps long, loud use of the sound
  565.    command would be nice while they are entering the required fields...)
  566.  
  567.                                                Regards,
  568.                                                   Virginia
  569.  
  570. Fm: Steve Caple (TeamB) 76711,520
  571. To: Virginia B. Sauer 72607,3335
  572.  
  573.    Arrrrrgh, matey!   2 pages, all required fields, too, with hidden
  574.    lookups ...  or walk the plank!
  575.  
  576.    (Hi, Virginia - you've brightened our lives again!)
  577.  
  578. Fm: Virginia B. Sauer 72607,3335
  579. To: Steve Caple (TeamB) 76711,520
  580.  
  581.    Hi Steve:
  582.  
  583.       << 2 pages, all required fields, too, with hidden lookups ... >>
  584.  
  585.    Yeah, but the _MOST_ important feature is to have the system first check
  586.    the user's title, so that the chairman et al instead receive a gracious
  587.    "Please do not do that again" <g>.
  588.  
  589.    (Giving senior management all required fields might, er, make them
  590.    feel that the _DEVELOPER'S_ services would no longer be required.)
  591.  
  592.                                                Regards,
  593.                                                   Virginia
  594.  
  595. #: 230655 S1/New Users/Misc ·
  596.     01-Jun-93  10:48:21
  597. Sb: memo resource failure
  598. Fm: Rohit Gangwar 75330,537
  599. To: all
  600.  
  601.   While on a memo field in a table-view, the following command
  602. fails with a "I113: Resource Error File Create":
  603.  
  604.    FileWrite "somefile.txt" From [] + Chr(4)
  605.  
  606. while the following PAL code works as expected:
  607.  
  608.    a = [] + Chr(4)
  609.    FileWrite "somefile.txt" From a
  610.  
  611. Is this behavior expected?  The machine in question has 8 Meg RAM,
  612. HIMEM.SYS is loaded, and Paradox is started using -extk=4096 switch.
  613. The memo field is smaller than 64 KBytes.
  614.  
  615. Both alternatives work on my work machine with the same amount of
  616. memory and Paradox allocation, using EMM386.  The number of files
  617. specified in Config.sys is 80 on both machines.
  618.  
  619. Fm: Don Schubert (TeamB) 70007,4654
  620.  
  621.    Example #2 is the preferred way to code it.
  622.  
  623. #: 230687 S1/New Users/Misc ·
  624.     01-Jun-93  15:30:43
  625. Sb: formatting for case
  626. Fm: John Pirtle 71742,2032
  627. To: all
  628.  
  629. Our financial company uses a database software that causes everything input to
  630. be in UPPER case.
  631.  
  632. I can convert everything to Paradox 4.0, but the client names, etc. come out
  633. in UPPER case.  How can I convert this to lower case so that I can use the
  634. FORMAT ("CC", LNAME) command (LNAME is the field name) to get to the regular
  635. first letter capitalized format?
  636.  
  637. I'm a new user to Paradox, and am not really using any of the PAL.  So what's
  638. the easiest way to do this?
  639.  
  640. Fm: Brian Bushay (TeamB) 76711,516
  641. To: John Pirtle 71742,2032
  642.  
  643.    >I can convert everything to Paradox 4.0, but the client names, etc. come out
  644.    >in UPPER case.  How can I convert this to lower case so that I can use the
  645.    >FORMAT ("CC", LNAME) command (LNAME is the field name) to get to the regular
  646.    >first letter capitalized format?
  647.  
  648.    You need a bit of PAL code for this conversion
  649.  
  650.    CoEdit "YourTbl"  ;put the table on the workspace in CoEdit
  651.    Scan  ;this command loops threw all record from top to bottom
  652.    [Lname] = Format("CC",Lower([Lname]))
  653.  
  654.    [Fname] = Format("CC",Lower([Fname]))  ;you can do other fields too
  655.    EndScan
  656.  
  657. Fm: Virginia B. Sauer 72607,3335
  658.  
  659.    John -
  660.  
  661.    I am CMailing you a simple generic utility to automatically convert any
  662.    field to any desired case.
  663.  
  664.    I hope that you will find it helpful.
  665.  
  666.  
  667.                                                Regards,
  668.                                                   Virginia
  669.  
  670. #: 230761 S1/New Users/Misc ·
  671.     01-Jun-93  20:50:09
  672. Sb: INIT.SC wont
  673. Fm: ron johnson 71330,3266
  674. To: sysop (X)
  675.  
  676.   I have a problem with INIT.SC. If I run PX4.0 with -share on, PX does not
  677. recognize (nor run) the INIT.SC. If -share is OFF, it works correctly. I
  678. require '-share' since we shell out to Paradox Engine to perform some
  679. calculations then empty the table, and PX will not recognize the changes
  680. without it. I tried putting INIT in the root dir next to .NET file but still
  681. did not work.
  682.  
  683. Fm: Harry Goldman (TeamB) 75300,1733
  684.  
  685.    When using -SHARE PDOX thinks that you are on a network, and will look
  686.    for the INIT script in your PRIVATE Directory. Make sure that you
  687.    have a private directory defined, that the INIT script is in it, and
  688.    that this directory is in your DOS PATH.
  689.  
  690. Fm: Brian Bushay (TeamB) 76711,516
  691.  
  692.    init.sc is a private script that is intended to be read from each users
  693.    private directory.
  694.  
  695.    If you want a Global script call that script as a command line parameter
  696.  
  697.    Paradox -share scriptname
  698.  
  699. #: 230784 S1/New Users/Misc ·
  700.     01-Jun-93  23:21:02
  701. Sb: Memo Field Edit
  702. Fm: larry hoefling 71271,3251
  703. To: SYSOP (X)
  704.  
  705. This seems like such a fundamental question that I am embarrassed to ask.
  706. However, after pouring the manuals and still finding no answer---
  707.    I am attempting to allow a user to edit a memo field in a multi-table form,
  708. with a structure similar to this:
  709.  
  710.                 Table: Names               Table: Comments
  711.                  Lastname  A25*             Lastname  A25*
  712.                  Firstname A25*             Firstname A25*
  713.                                                                     Date
  714. D*
  715.                                                     Comment   M15
  716.  
  717. I'm using a form on the "NAMES" table with an embedded linked "COMMENTS"
  718. table.  I can press F9 and edit the date field just fine - but when I attempt
  719. to edit the memo field, I can't a "CANT EDIT THIS FIELD" error msg.  Pressing
  720. CTRL-F pops the editor up just fine, and any message I have entered in table
  721. view will be displayed in the form view...but no editing is possible.  I
  722. cannot find any reference to this situation in the manual.  It seems so basic
  723. - what gives?
  724.    Also - I have seen references to version 4.02...I've received the 4.01
  725. update with Tutility...how do I receive the next maintenance update and what
  726. do I tell my clients who ask why a fix was needed.  (They always ask
  727. what the bug was...)
  728.  
  729. #: 231253 S1/New Users/Misc ·
  730.     03-Jun-93  23:19:14
  731. Sb: #231132-Splash .exe
  732. Fm: Harry Goldman (TeamB) 75300,1733
  733. To: Russ Petrucci 70324,257 (X)
  734.  
  735. The utility I used was called GRABBER. It is shareware, and can be
  736. downloaded from the IBM forums. It is also sold through an shareware house
  737. in TX.
  738.  
  739. #: 231524 S1/New Users/Misc ·
  740.     05-Jun-93  13:07:19
  741. Sb: #231425-Duplicates
  742. Fm: Harry Goldman (TeamB) 75300,1733
  743. To: Vincent Wellrich 72340,203
  744.  
  745. You will have to use a little PAL to do this.
  746.  
  747. There are two ways that you can delete the records. First, you can use PAL
  748. to search for a match on the first field, then attempt to match the first
  749. three characters of the second field with PAL. If the match fails, look for
  750. the next occurance and try again:
  751.  
  752. View "Table1"       ; <--- Table to delete records from
  753. CoEdit "Table2"
  754.  
  755. Scan
  756.    Message Recno()
  757.    Val1 = [Field1]
  758.    Val2 = Substr([Feild2],1,3)       ; Grab the first three characters
  759.    Moveto "Table1"                   ; Jump to the other table
  760.    Home                              ; Make sure we are at the top
  761.    Moveto [Field1]                   ; Get to the right field
  762.    Locate Val1                       ; Try to find the value from field 1
  763.    If Retval Then                    ; If found do this:
  764.       Retval = True                  ;
  765.       While Retval                             ; loop through all field 1 's
  766.          If Val2 = Substr([Field2],1,3) Then   ; look for 3 characters
  767.             Del                                ; first one found, delete
  768.             Quitloop                 ; done
  769.          Endif                       ;
  770.          Down                        ; If the 3 characters didn't match, go
  771.          Locate Next Val1            ; for the next value of Field1
  772.       Endwhile                       ;
  773.    Endif                             ;
  774.    Moveto "Table2"                   ; when done, return to table2
  775. Endscan
  776.  
  777. ;-----------------------------------
  778.  
  779. The second way to do this would be to set up an A3 field. Use PAL to copy
  780. the first three characters from Field2 to this new field. Now you can use a
  781. query to delete the matching records.
  782.  
  783. Fm: John B. Moore (TeamB) 71333,1775
  784.  
  785.    Off the top I'd say you will need to create a new field (temporary) and
  786.    use a scan with Substr() to extract the first three characters.  Then a
  787.    query will take care of the rest..  You'll then need the famous
  788.    "Not-in" query.  For that see Techfax 784
  789.  
  790. #: 231559 S1/New Users/Misc ·
  791.     05-Jun-93  14:46:08
  792. Sb: #231138-APPENDARRAY
  793. Fm: Marlene Thacker (Sysop) 76702,1052
  794. To: Randy Sinclair 76450,1507 (X)
  795.  
  796. Append Array will only add one record at a time.  What you can do is put
  797. yourself in some kind of a loop remembering to always move down one record so
  798. you don't overwrite your latest entry.
  799.  
  800. #: 231367 S1/New Users/Misc ·
  801.     04-Jun-93  14:13:39
  802. Sb: Application build help
  803. Fm: michael marks 76044,1013
  804. To: ALL
  805.  
  806.        My company, a consultant firms (sales and mangement mostly) has asked
  807. me to write an application. They want this application to read in sales
  808. figures from various salesmen and give and an interpretation of the data. For
  809. example, most database or other "inventory" holding programs can dump the data
  810. into a standard ASCI file, with commas to divde up the groups. The application
  811. should read in the column marked total, or just column 1 and respond: The
  812. numbers are decreasing at a rapid margin, so the application follows a
  813. pre-defined flow chart and responds: Try better communication. Make any sense?
  814. The flowchart and rules are already on paper. However I am not quite sure how
  815. to start, I have a extended amount of time, so I can learn the nessesary
  816. tools..Someone adivised that Clarion(dos), Access, would do everything I
  817. need..I understand a little Pascal and C, but not enough to begin here. I have
  818. not commited to either Windows or Dos yet. I would be grateful for any
  819. comments. Thanks in advance.
  820.  
  821. Fm: Marlene Thacker (Sysop) 76702,1052
  822.  
  823.    >       My company, a consultant firms (sales and mangement mostly) has
  824.    asked me to write an application. They want this application to read in
  825.    sales figures from various salesmen and give and an interpretation of
  826.    the data.
  827.  
  828.    >For example, most database or other "inventory" holding programs can
  829.    dump the data into a standard ASCI file, with commas to divde up the
  830.    groups. The application should read in the column marked total, or just
  831.    column 1 and respond: The numbers are decreasing at a rapid margin, so
  832.    the application follows a pre-defined flow chart and responds: Try
  833.    better communication. Make any sense? The flowchart and rules are
  834.    already on paper. However I am not quite sure how to start, I have a
  835.    extended amount of time, so I can learn the nessesary tools..
  836.  
  837.    >Someone adivised that Clarion(dos), Access, would do everything I
  838.    need..I understand a little Pascal and C, but not enough to begin here.
  839.    I have not commited to either Windows or Dos yet. I would be grateful
  840.    for any comments.  Thanks in advance.
  841.  
  842.    I can think of two ideal situations for what you're trying to do.  One
  843.    would be Paradox for Windows using ObjectPal.   One of the benefits here
  844.    is that your enduser will be able to remain in a Windows environment.
  845.    You would have to import the data in question into Paradox.  I do not
  846.    know of any database on the market that can analyze a txt file without
  847.    import.  The other would be a combination (hot-link) of Paradox 4.0 and
  848.    Quattro Pro.  The reason for adding Quattro Pro into the picture is the
  849.    Advanced Graphing capabilities of the package.
  850.  
  851.    The "flowchart" logical choice would be relatively simple in both
  852.    packages
  853.  
  854.    For a comprehensive list of Paradox for Dos 4.0 download a Technical
  855.    information Handout # 1111 from section 12 of this forum or for Paradox
  856.    for Windows download Technical Information Handout # 1239 from the
  857.    PdoxWin forums.
  858.  
  859. Fm: Dickford Cohn 76226,1572
  860.  
  861.       Marlene, re 'I know of no database product on the market that can
  862.       analyze and ASCII file without import'...while technically not a
  863.       database product, per se...Personics MONARCH can do this very nicely
  864.       -and- interactively...no coding and no importing...and it can create
  865.       files in a variety of formats for further processing, if that is
  866.       desired.  I'm sure there are other products out there that folks
  867.       prefer, too.  FWIW...
  868.  
  869. Fm: Don Schubert (TeamB) 70007,4654
  870. To: Dickford Cohn 76226,1572
  871.  
  872.       MONARCH does not aalyze the data in the sense that a spreadsheet (or
  873.       PDOXWIN) can. It will, however, allow one to work with ascii data
  874.       directly in a flatfile kind of way.
  875.  
  876. Fm: Dickford Cohn 76226,1572
  877. To: Don Schubert (TeamB) 70007,4654 (X)
  878.  
  879.    That's what I was trying to say in my typical obfuscatory kind of
  880.    way...you can do quite a bit with it (Monarch) if you're satisfied
  881.    with rudimentary data manipulations.  As is so often the case however,
  882.    data begets data, in which case it would definitely be worth the time
  883.    spent to get this stuff into a spreadsheet or database to begin with.
  884.  
  885.    My only point was that if someone needed a quick read on say 'Sales by
  886.    Region' from an ASCII report from the mainframe, this could be done in
  887.    Monarch in three shakes of a lamb's tail.  Obviously, there is no way to
  888.    compare historical data unless it's included within the same report.
  889.  
  890. Fm: Don Schubert (TeamB) 70007,4654
  891.  
  892.    Graphing functions are a bit threadbare in Monarch, too <smile>...
  893.  
  894. Fm: Norman Cavender 70523,463
  895.  
  896.    I'm not sure I understand precisely what you are trying to do.  Provided 
  897.    your rules are logically defined and correspond to specific actions, 
  898.    Paradox has quite a bit of capability.  Whether software exists that 
  899.    would do it better, I can't say.  But in the category you mention 
  900.    (Paradox, Clarion, Access) I believe you would be extremely happy with 
  901.    the capabilities of Paradox and the PAL/Opal languages.
  902.  
  903.    FWIW, we use Paradox for some rather complex production planning: "If x 
  904.    and not y, then adjust the volume of z and notify q".  If this type of 
  905.    logical construct is what you have in mind, post a more specific 
  906.    question.  You will find numerous people here willing to help you sort 
  907.    out an approach.
  908.  
  909. #: 229756 S2/Pdx Vers/1.0-3.5 ·
  910.     25-May-93  23:05:52
  911. Sb: Mailing Labels
  912. Fm: Barbara J. Pfieffer 72302,2453
  913. To: sysop (X)
  914.  
  915. I am using 3.5 and I am having several problems with mailing labels.  The
  916. printer is a HPII.
  917.  
  918. Problem one: I have cases where either there are husband and wife at the same
  919. address or sisters with the same last name at the same address.  My users want
  920. to send out only one label for these situations. Obviously I can't use Mr &
  921. Mrs to select only one label. Is there a way in the report form to print only
  922. one of these?  Or possibly a query before using the report?
  923.  
  924. Problem two: I need ideas. To print 3 across, I can only fit the first name
  925. and last name field. My users would like to put in titles where appropriate
  926. (Dr. Fr. Sr.). These titles are in a separate field in the database. Is there
  927. any way to insert the title when and where necessary?
  928. I can't add another line to the label, it will screw up the alignment. I
  929. already have field and line squeeze applied.  All help will be appreciated.
  930.  
  931. Fm: Brian Bushay (TeamB) 76711,516
  932.  
  933.    >Problem one: I have cases where either there are husband and wife at the same
  934.    >address or sisters with the same last name at the same address.  My users want
  935.    Assuming last name and Address are the same for these labels you want to
  936.    combine you can use a query like this
  937.  
  938.    YourTbl | First name         | Last Name | Address   | City    |
  939.          | Calc Max as F name | Check     | Check     | Check   |
  940.  
  941.    This  will leave you with one record per last name/Address combination.
  942.    To get more intelligence you will have to write a PAL program.
  943.  
  944.    >(Dr. Fr. Sr.). These titles are in a separate field in the database. Is there
  945.  
  946.    You would have to have an additional field that would indicate it the Title
  947.    (Dr.) went at the beginning of the name or the end (Sr.)
  948.  
  949. Fm: Curtis Christensen 72120,3621
  950.  
  951.    You may want to try calculated fields where you add the title field and the
  952.    first name field and the title and lastname fields  together
  953.                      i.e.  [title]+" "+[firstname]
  954.    as the field placed on the report that way your field squeeze will work and
  955.    they will show without leading space when not needed ( as an empty field
  956.    would).
  957.    Be sure to include the blank space so they don't run together
  958.  
  959. #: 230283 S2/Pdx Vers/1.0-3.5 ·
  960.     28-May-93  17:20:22
  961. Sb: Linking
  962. Fm: Beth Bilgram 72302,3612
  963. To: all
  964.  
  965. Currently, I have a spreadsheet that calculates benefit information based on
  966. the information I input.  This spreadsheet acts as a template.  The
  967. information that I input comes from my Paradox 3.0 database.  In order to
  968. perform the benefit calculation I have to access the database, look up the
  969. information needed for the spreadsheet inputs, write down this information,
  970. access the spreadsheet, and input the information.  This process becomes quite
  971. tedious when it is necessary to calculate benefits for many individuals.  Is
  972. there any way to link my database directly to the spreadsheet template that I
  973. have created?  Or is there perhaps a third party package that can link the
  974. two?  I would like for this database to shoot over the input fields necessary
  975. for my spreadsheet.
  976.  
  977. Fm: Steve Caple (TeamB) 76711,520
  978.  
  979.    There are a couple of possibilities.  One is that QuattroPro and Paradox 3.5
  980.    and later (I know, you said you have 3.0) interoperate.  QuattroPro 4
  981.    operates very well directly on Paradox tables (of course, the size is limited
  982.    by the limitations of the spreadsheet memory).
  983.  
  984.    Possibly better, and accomplishable in 3.0, is a table that contains the
  985.    ranges, codes, rates, etc. that determine which variant calculations should
  986.    be performed.  This and some queries might do the looking up and calculating
  987.    for you without leaving Paradox.  Drop us some table structure info and
  988.    sample calculation parameters and maybe we can set up a query for you that
  989.    will show the pattern to follow.
  990.  
  991. #: 230513 S2/Pdx Vers/1.0-3.5 ·
  992.     31-May-93  13:56:10
  993. Sb: find recs > spec length
  994. Fm: Gunji Bagla 71321,2126
  995. To: All
  996.  
  997. I am trying to convert/export a 10,000 record Pdox database into another
  998. program. I discovered that the new pgm has certain many fields that are
  999. smaller than my current Pdox fields. Rather than let the export process trim
  1000. the fields, I need to look at each instance where trimming may occur and
  1001. attempt to come up with a system (such as insepction and abbreviation or
  1002. whatever) to minimize loss of useful data.
  1003.  
  1004. I was wondering if there is any easy way in Pdox to identufy records where a
  1005. specified field exceeds a specified length.  I will have to do this this
  1006. process for about 15-20 of the 65 different fileds I am exporting...
  1007.  
  1008. Fm: Graham L. Stoppani 100111,265
  1009.  
  1010.    I am sure some will come up with a more sophisticated answer than this but
  1011.    try the following:
  1012.  
  1013.    1. take a copy of the file for safety's sake.
  1014.    2. MODIFY, RESTRUCTURE
  1015.    3. change the field length of one or more of the fields you are concerned
  1016.       with to their smaller size for the new program.
  1017.    4. DO_IT! and take the NO TRIMMING option.
  1018.    5. any records who's fields are now longer than the new smaller length will
  1019.       be placed in a table called PROBLEMS.
  1020.  
  1021. Fm: Don Schubert (TeamB) 70007,4654
  1022.  
  1023.    Just off the top of my head. You could create/borrow a special export table
  1024.    with the shortened fields in it and keyed. Then try to add your real table's
  1025.    records to it. The problem records should fall out into a keyviol table which
  1026.    you can rename and work with.
  1027.  
  1028. #: 230663 S2/Pdx Vers/1.0-3.5 ·
  1029.     01-Jun-93  12:44:09
  1030. Sb: Copying 10MB table
  1031. Fm: Robin Compton 75250,2656
  1032. To: sysop (X)
  1033.  
  1034. Is it possible to copy all of the files belonging to a table to floppy
  1035. diskettes when the table itself is well over 10MB?  How does one go about
  1036. doing that?  Thanks!!
  1037.  
  1038. Fm: Brian Bushay (TeamB) 76711,516
  1039.  
  1040.    No not from Paradox and not with DOS COPY.  You can use DOS BACKUP or
  1041.    some other backup program.  Of course this will require multiple disks
  1042.  
  1043. Fm: Virginia B. Sauer 72607,3335
  1044.  
  1045.    Several public domain or shareware products are available to copy files that
  1046.    exceed the size of a single diskette.  I am CMailing you Slice.Com, which
  1047.    is included in PC Magazine's book (DOS 5 Techniques and Utilities), and on
  1048.    their CompuServe forum).  The following directions assume that you are at
  1049.    the DOS prompt; if invoked from Paradox, simply type as a run command - e.
  1050.    g., Run "Slice MyFile.Zip A:", substituting your filename for MyFile.Zip.
  1051.  
  1052.    Slice.com breaks large files into pieces and copies it to the required
  1053.    number of diskettes.  The format is Slice Filename TargetDrive - e. g., to
  1054.    split a file named MyFile.Zip to diskettes in drive A:
  1055.       Slice MyFile.Zip A:
  1056.          |     |        |_ Target drive containing diskette
  1057.          |     |__________ Name and extension of file to be copied
  1058.          |________________ Word Slice
  1059.  
  1060.    During this process, file Splice.com will be automatically added to the
  1061.    first diskette.  Splice.com reconstructs the divided files, using format
  1062.    SourceDrive:\Splice SourceDrive: TargetDrive\TargetDirectory - e. g., to
  1063.    copy the above spliced file from a diskette in Drive A to directory c:\MyDir:
  1064.    -- Insert the first diskette "sliced" as above (since this is the one
  1065.       that will contain the "Splice" command).
  1066.    -- Then, type:
  1067.       A:\Splice A: C:\MyDir
  1068.       | |  |    |    |_ Target drive and directory to which to copy file
  1069.       | |  |    |______ Source drive (containing the diskette)
  1070.       | |  |___________ Word Splice
  1071.       | |______________ Backslash
  1072.       |________________ Source drive (containing the diskette)
  1073.  
  1074.    I hope that this will prove helpful.
  1075.  
  1076. #: 231692 S2/Pdx Vers/1.0-3.5 ·
  1077.     06-Jun-93  22:30:26
  1078. Sb: EDIT A FEW RECORDS
  1079. Fm: JOHN KLIEGL 70372,3007
  1080. To: ALL
  1081.  
  1082. I have two tables CUSTOMER and NOTES.
  1083. the CUSTOMER file is keyed to [CUST#] and the NOTES file is keyed to [CUST#]
  1084. and [date]
  1085. I have created a multi-table form to enter my info. I would like to edit the
  1086. multi-table form for just one [date]. but I can only edit all the records in
  1087. the file.
  1088. If I ask the NOTES file for a certian date it will give me all the [CUST#]'s
  1089. for that date , but I don't know how to select ONLY those customers to edit.
  1090.  
  1091. CUSTOMER                        NOTES
  1092. [CUST#] *                       [CUST#]  *
  1093. [NAME]                  [DATE]   *
  1094. [ADDR]                  [NOTES]
  1095. [CITY]
  1096. [STATE]
  1097. [ZIP]
  1098. etc.
  1099.  
  1100. in short...
  1101. So I want to edit all the CUSTOMER records with NOTES>[date] = "06/06/93".
  1102.  
  1103. Fm: Steve Caple (TeamB) 76711,520
  1104.  
  1105.    I'm assuming that Notes is the embedded detail and is embedded _linked_
  1106.    to Customer.
  1107.  
  1108.    In a form such as this, for a given Customer, only and all of those
  1109.    Note entries for that Cust# will be displayed and available for edit.
  1110.  
  1111.    To see all the Notes entries for a given date, regardless of Customer,
  1112.    you cannot use the linked form.  In single user mode, you could use a
  1113.    query (checkmark all fields, use tableview or another form on the
  1114.    Answer) to select all Notes records for that date, edit them, and then
  1115.    do a Tools/More/Add/Update to propagate the changes back.
  1116.  
  1117. #: 231800 S2/Pdx Vers/1.0-3.5 ·
  1118.     07-Jun-93  14:35:09
  1119. Sb: Runtime 3.5 problem
  1120. Fm: Roger Fletcher 100016,234
  1121. To: All
  1122.  
  1123. A client has just tried to install an application of mine on her 486.  When
  1124. she enters "pdoxrun scriptname" she is dumped back at the DOS prompt with the
  1125. Paradox error message "Internal 0608GP1507".
  1126.  
  1127. Fm: Dickford Cohn 76226,1572
  1128.  
  1129.    I'm assuming that you're using version 3.5 of Runtime...if so, have your
  1130.    user include the -REAL command on your startup line...that's no
  1131.    guarantee that the app will run -but- you should get a meaningful error
  1132.    message either when Pdoxrun abends -or- in the Debugger.   EXAMPLE:
  1133.    PDOXRUN -REAL scriptname
  1134.  
  1135. #: 229170 S3/Install/CFG/HrdWare ·
  1136.     22-May-93  21:00:22
  1137. Sb: #228994-Caching
  1138. Fm: Michael Radulescu 71561,3647
  1139. To: Dickford Cohn 76226,1572 (X)
  1140.  
  1141. A few weeks back I called BI, there's a dept. some "special events", which
  1142. handles this. The binder(s?) will set you back app. $200... at least this is a
  1143. number a nice lady gave me at that time...
  1144.  
  1145. #: 229199 S3/Install/CFG/HrdWare ·
  1146.     23-May-93  11:00:14
  1147. Sb: #229171-Paradox Runtime 4.0
  1148. Fm: Les Gainous 72731,146
  1149. To: Michael Radulescu 71561,3647
  1150.  
  1151. RE:  I have not installed it (RT) but I suspect it is 4.02.
  1152.  
  1153. The date/times (on the diskettes) on both the full development system and
  1154. runtime files is:
  1155.  
  1156.            05/04/93  4:02a.m.
  1157.  
  1158. So, if the time is 4:02a.m., looks like you have v4.02.  A "sure-fire" way
  1159. to find out is to try to update a table through a form viewed in secondary
  1160. index order.  If you can issue the PAL command:
  1161.  
  1162. POSTRECORD NOPOST LEAVELOCKED
  1163.  
  1164. without recieving an errorcode of 20, then you have v4.02.
  1165.  
  1166. Good Luck!  Les  72731,146
  1167.  
  1168. Fm: Dickford Cohn 76226,1572
  1169.  
  1170.    Les, I thought VERSION() is supposed to return 4.02...is that not
  1171.    correct?
  1172.  
  1173. Fm: Don Schubert (TeamB) 70007,4654
  1174. To: Dickford Cohn 76226,1572 (X)
  1175.  
  1176.    That is correct. VERSION() returns 4.02.
  1177.  
  1178. #: 230597 S3/Install/CFG/HrdWare ·
  1179.     31-May-93  23:48:20
  1180. Sb: #229601-Auth Users Exceeded
  1181. Fm: Mike Downey (CHC) 70404,2657
  1182. To: Harry Goldman (TeamB) 75300,1733
  1183.  
  1184. To clear up any confusion, there is indeed a CUSTOM script included with
  1185. v4.0x, though you are no longer required to call it on the command line.
  1186. Even if you use Utilities|Custom from the system menu, the script is still
  1187. required.  I assume that Paradox will always look for it in the directory
  1188. where it found PARADOX.EXE.
  1189.  
  1190. Also, I believe that if you have PDOXRUN, you would still need to use
  1191. "pdoxrun custom" or have a PAL script with {p} {Utilities} {Custom}.  I
  1192. prefer the method of running custom from paradox and copying PARADOX.CFG to
  1193. PDOXRUN.CFG.
  1194.  
  1195. #: 229266 S4/Forms/Handling Data ·
  1196.     23-May-93  22:20:50
  1197. Sb: #229243-Calc fields in forms
  1198. Fm: Harry Goldman (TeamB) 75300,1733
  1199. To: Brad Morris 71035,753 (X)
  1200.  
  1201. >How do I go about doing this? I can do it in PDOX for windows but can it be
  1202. >done in DOS? (I have Pdox 4.0)
  1203.  
  1204. You will need to place a variable in the calc'ed field, and then use PAL to
  1205. set the value of the variable to the sum of the fields in the linked
  1206. display.
  1207.  
  1208. Fm: Brian Bushay (TeamB) 76711,516
  1209. To: Brad Morris 71035,753 (X)
  1210.  
  1211.    You will need to use PAL to move to the embeded form and total the field
  1212.     and set a variable equal to that total. Then move back to the master
  1213.    form.  In the form use a Calculated field using the variable.
  1214.  
  1215. #: 229376 S4/Forms/Handling Data ·
  1216.     24-May-93  13:10:59
  1217. Sb: auto key generation
  1218. Fm: David Rudd 76264,1765
  1219. To: techsupp
  1220.  
  1221. Since RECNO() is not supported as a Calculated field in a form, is there
  1222. another way to use record number as a key on a multi-record form which will be
  1223. placed on a multi-table form to create a many-to-one relationship with
  1224. automatic sequence generation.  That is, without writing a dataentry script or
  1225. having to enter the sequence number manually?
  1226.  
  1227. Fm: John Rendell 70474,377
  1228.  
  1229.    David - think about what you are asking.
  1230.    If you base the key of a record on record number, you should be ready to
  1231.    handle all sorts of problems that will crop up (a whole lot more code than a
  1232.    basic data entry script).
  1233.    For instance, say you have 3 records.  Each has a key based on the record
  1234.    number (1, 2, 3).  Now Delete record 2.  This leaves 1 and 3.  Now insert a
  1235.    new record (IF it is at the bottom of the table, it will be record 3,
  1236.    otherwise, it might be 1,2,or 3).  Immediate key violoations.
  1237.    The best way to handle this is with a little bit of Pal.  It can be done in
  1238.    approx 10 lines of code that could be attached to a setkey.
  1239.    If you are trying to stay away from writing code, you may want to check out
  1240.    WaitPlusPro - a data entry system that can be as simple or complex as you
  1241.    wish.  If you are using 3.5, you might want to look at Command Center(there
  1242.    may be 4.0 version out - I'm not sure).
  1243.  
  1244. #: 229381 S4/Forms/Handling Data ·
  1245.     24-May-93  13:15:04
  1246. Sb: proc place on frm
  1247. Fm: David Rudd 76264,1765
  1248. To: techsupp
  1249.  
  1250. Is there a work around for placing a user-defined procedure call in a form for
  1251. editing (outside of using DE Kit).  For instance: placing as display
  1252.  
  1253. Min2hhmm(Minutes) where Minutes is a number and Min2hhmm converts Minutes to
  1254. hh:mm string format?  Perhaps I am missing something in the available time
  1255. conversion functions?
  1256.  
  1257. Fm: Harry Goldman (TeamB) 75300,1733
  1258.  
  1259.    You can place a caculated field on the form to convert this.
  1260.  
  1261.    Assuming that you are storing the number of minutes since midnight, to
  1262.    display HH:MM use:
  1263.  
  1264.    Strval(Format("W2,EZ",Int(Minutes/60))) + ":" +
  1265.    Strval(Format("W2,EZ",Mod(Minutes,,60))
  1266.  
  1267. Fm: Steve Caple (TeamB) 76711,520
  1268.  
  1269.    It sounds like you want to place a calculated field.  You can't place
  1270.    user defined procedures in these, but you can write fairly complex
  1271.    expressions.
  1272.  
  1273.    Assuming a variable or field called Minutes containing a number 1235 for
  1274.    example, try the following expression:
  1275.  
  1276.       strval(int(Minutes/60))+":"+strval(mod(Minutes,60))
  1277.                                ^                           ^
  1278.  
  1279. #: 229927 S4/Forms/Handling Data ·
  1280.     26-May-93  18:15:52
  1281. Sb: Popping tables
  1282. Fm: Tom Bates 76427,353
  1283. To: ALL
  1284.  
  1285. Why do tables pop up over forms all the time?  Here's my problem.
  1286.  
  1287. I view a table.  I pick a form for that table, which takes up the whole
  1288. desktop display.  Fine, since this is a data entry screen and I don't want the
  1289. user to see the table.  Now, I view another table.  Guess what?  The FIRST
  1290. table pops on top of the data entry screen.  WHY?  Who told that rogue to make
  1291. an appearance?
  1292.  
  1293. Fm: Brian Bushay (TeamB) 76711,516
  1294.  
  1295.    You can't view another table with out getting out of FormView.  When you
  1296.    do that the table image becomes current.  The current table is always
  1297.    on top.
  1298.  
  1299.    Solution: when you bring a table up for the first time if you don't want
  1300.    to see it again move it off the visible portion of the screen
  1301.  
  1302. Fm: Tom Bates 76427,353
  1303.  
  1304.          Let me see if I understand your explanation.
  1305.  
  1306.          I view a table, and go into form view.  The table is hidden beneath the
  1307.    form since the form takes the whole screen.  Now I view another table. Before
  1308.    that table pops up, the first table appears on top of the original data entry
  1309.    form.  Now if I remove the new table, the previous TABLE view is current, not
  1310.    the form view, correct?
  1311.  
  1312.          Say I move the table view off the screen by doing SetAttributes
  1313.    ["originrow"]=1000 before loading the second view. When I unload the second
  1314.    view, is the current window the one that's not visible (the table view)?
  1315.  
  1316.          Also, I tried this:  load both tables and forms, then switch windows
  1317.    using "Window Select".  Guess what?  When I select the FORM window for the
  1318.    second table, the two TABLE VIEWS come along for the ride.  What I want is
  1319.    just the big data entry form on bottom, and the little lookup form on top. It
  1320.    seems like my only way to do this is move the table views off the screen.
  1321.  
  1322.          If so, this tells me that in order to convert my application, I really
  1323.    need to carefully manage the window handles for all views - tables and forms,
  1324.    and move them on and off the desktop as required.
  1325.  
  1326.          Thanks for your responses.  I'm still trying to fully understand the
  1327.    window/canvas/image/table/form concepts.  The manual just doesn't seem to
  1328.    explain it in a way that I can grasp.  It reminds me of the days before I
  1329.    fully understood the conventional/upper/EMS/XMS memory concepts of DOS.
  1330.  
  1331. Fm: Brian Bushay (TeamB) 76711,516
  1332.  
  1333.    >       Let me see if I understand your explanation.
  1334.    >I view a table, and go into form view.
  1335.    >The table is hidden beneath the form since the form takes the whole screen.
  1336.    it may be hidden but the point is the formView is the current window and the
  1337.    current window is always on top
  1338.  
  1339.    >Now I view another table. Before that table pops up, the first table appears
  1340.    >on top of the original data entry form.
  1341.    Anytime you leave a form the table window associated with that form becomes
  1342.    the current window, so it moves to the top.  Then your free to move to other
  1343.    windows
  1344.  
  1345.    >Now if I remove the new table, the previous TABLE view is current, not the
  1346.    >form view, correct?
  1347.    Yes
  1348.  
  1349.    >Say I move the table view off the screen by doing SetAttributes
  1350.    >["originrow"]=1000 before loading the second view. When I unload the second
  1351.    >view, is the current window the one that's not visible (the table view)?
  1352.    Use WINDOW MOVE
  1353.    Yes the table view you moved is current and on top of the Z order but since
  1354.    it is off screen it doesn't obscure the form
  1355.  
  1356.  
  1357.    >       If so, this tells me that in order to convert my application, I really
  1358.    >need to carefully manage the window handles for all views - tables and forms,
  1359.    >and move them on and off the desktop as required.
  1360.    That is the point you needed to get<G>
  1361.  
  1362. Fm: Tom Bates 76427,353
  1363.  
  1364.          Thanks for the info.  It's amazing how the right combination of words
  1365.    and sentences can make the light go on in someone's mind!<g>
  1366.  
  1367.          And that little tidbit "WINDOW MOVE"...I was doing it the hard way!
  1368.  
  1369. #: 229980 S4/Forms/Handling Data ·
  1370.     27-May-93  00:41:01
  1371. Sb: Incorrect Total-Calc
  1372. Fm: Alex M. Kelso 74710,2070
  1373. To: SysOp (X)
  1374.  
  1375. SysOp......Problem: I can't subtract a linked field from a summarized total
  1376.                     (and incidently <g>) get the correct answer.
  1377.  
  1378.            Process:  [price] - ([price] * ([Disc%] * 1/100)) = Correct Answer
  1379.  
  1380.            If I subtract a linked field from a table, the last detail entry
  1381.            that is summed is only used, not the sum of the group:
  1382.  
  1383.                                             17th entry          183.92 ok
  1384.                Example:                     18th & last entry    81.90 ok
  1385.                                                  Sum Total is 3,150.00 ok
  1386.                                              Monthly Rent     - 150.00 Linked
  1387.                                              Total              (68.10)
  1388.  
  1389.            Formula used is:
  1390.            ([price] - ([price] * ([disc%] * 1/100))) - [vendor->morent]
  1391.                     If I take away the [vendor->morent] the correct sum shows
  1392.  
  1393. Fm: Brian Bushay (TeamB) 76711,516
  1394.  
  1395.    And where are you summarizing a total?
  1396.    There is no problem with the above formula but It is not being
  1397.    summarized.
  1398.  
  1399.    Also not that any linked fields will be summarized once for every record
  1400.    in the table being reported on not once per linked field.
  1401.  
  1402. Fm: Alex M. Kelso 74710,2070
  1403.  
  1404.    Brian.....I don't understand your response.......The linked field is in a
  1405.    vendor name and address table and the detail table of transactions is
  1406.    where I am running the report from.  I am grouping on vendor so that
  1407.    I'll read the same record....But.....I am summarizing by my selection of
  1408.    summary on the report screen....
  1409.  
  1410. #: 230140 S4/Forms/Handling Data ·
  1411.     27-May-93  21:10:23
  1412. Sb: multi-column forms
  1413. Fm: Tim Serges 71611,3655
  1414. To: anyone
  1415.  
  1416. I am using Pdox 3.5 I have created a multi- column form 2 pages long. I wish
  1417. to use the enter key to move down a column after entering a value for each
  1418. field in a column. However, when I enter a value in a field the Enter key
  1419. moves horizontally to the next column.  How can I control the direction. Also
  1420. when I reach the bottom of one column. I wish to go to the top of the next
  1421. column of fields. When I reach the end of the last column first page, I wish
  1422. to go to the next page first column on the form.  I expect to use the Wait or
  1423. Setkey but how?
  1424.  
  1425. Fm: Brian Bushay (TeamB) 76711,516
  1426.  
  1427.    There is one trick you use when building forms that gives you the appearance
  1428.    of movement that you want.  What you do is build 2 pages that look identical
  1429.    but the fields in one column are regular fields and the fields in the other
  1430.    column are Display only.  Alternate the column that is Display only on the
  1431.    next page.  Movement will be from regular field to regular field.
  1432.  
  1433.    When using Wait you need to keep track of which fields to moveto.
  1434.    one way you can do this is to keep a Dynarray of Fields that your on and
  1435.    fields you should move to.
  1436.  
  1437.    ;The following assumes you have 2 columns with 5 rows and fields named
  1438.    [Field 1] - [Field 10]
  1439.  
  1440.    Dynarray movement.y[]
  1441.             ;define like this
  1442.             ;current field     ;field to moveto
  1443.    movement.y["Field 5"]      = "Field 6"
  1444.  
  1445.    ;Then in your Wait Procedure attach code like this to your Depart field
  1446.    procedure
  1447.  
  1448.    Case event.y["keyCode"] = ASC("Enter")  ;when key is Enter
  1449.       If IsAssigned(movement.y[Field()]  Then   ;If exception movement
  1450.          Moveto Field movement.y[Field()]   ;move to that field
  1451.          Return 1  ;stop trigger cycle
  1452.       Else  ;No exception defined so we will translate to down
  1453.          event.y["keycode"] = ASC("Down")
  1454.          Release vars event.y["ScanCode"]  ;need to release ScanCode
  1455.          Return 0  ;the Wait will now process this key as if it was DOWN
  1456.       Endif
  1457.  
  1458.    Fm: Thomas P Knox 70410,764
  1459.  
  1460.       In Brian's response, he may have missed your opening remark that you are
  1461.       using 3.5.  Since dynarrays aren't avaiable in 3.5, you can substitute a
  1462.       fixed array that uses the colno() of the field you are in for its index
  1463.       and the name of the field to move to as its value (remember that the
  1464.          first field in a table is COLNO() = 2.  The record number is COLNO()
  1465.       = 1)
  1466.  
  1467.       You also have the problem of not having the DEPART triggers available.
  1468.       But if you trap for the Enter key in your wait, part of your code
  1469.       would be:
  1470.  
  1471.  
  1472.          array FieldArray[10]
  1473.          FieldArray[2] = "Date"
  1474.          FieldArray[3] = "Amount"
  1475.          FieldArray[4] = "SomethingElse"
  1476.          <etc.>
  1477.  
  1478.          switch
  1479.             case KeyPressed = 13:
  1480.                moveto field FieldArray[colno()]
  1481.             case ....
  1482.  
  1483.       if you were in the first field of the table, then pressing enter would
  1484.       move you to the [date] field.  If [date] was the 2nd field in your
  1485.       table (column number 3) then you would move to the [amount] field, and
  1486.       so on.
  1487.  
  1488.    Fm: Steve Caple (TeamB) 76711,520
  1489.  
  1490.       The non-PAL answer to this is the old "wallpaper" solution (from an
  1491.       early - version 1.1? - tool box item):  Make a _4_ page form - pages 1
  1492.       and 2 look the same, only in page one the column B fields are display
  1493.       only, and in page 2 the column fields are d.o.;  likewise for pages 3
  1494.       and 4.  The natural cursor movement will be just as you desire.
  1495.       However, this will not allow a user to move horizontaly with the arrow
  1496.       keys when the spirit moves him or her.
  1497.  
  1498.       The only way to do the latter involves PAL - but only one copy of each
  1499.       page.  If you're interested in a programming solution ask again (but it
  1500.       should be in Section 2, the section for versions prior to 4.0).
  1501.  
  1502. #: 230214 S4/Forms/Handling Data ·
  1503.     28-May-93  10:58:26
  1504. Sb: Default Values
  1505. Fm: Maurice Arney 75120,1032
  1506. To: ALL
  1507.  
  1508. Can anyone tell me how to create a default value which is equal to the entry
  1509. made in the previous field?  For example:
  1510.  
  1511. Part# _____________ Qty Shown: ____________ Qty Counted: ____________
  1512.  
  1513. I would like to make the default value of "Qty Counted" the same value that
  1514. was entered for "Qty Shown."
  1515.  
  1516. I cannot find any help in the Val Check instructions.
  1517.  
  1518. Fm: Harry Goldman (TeamB) 75300,1733
  1519.  
  1520.    You cann't make a valcheck that is dependednt on another field. You will
  1521.    need to use PAL for this.
  1522.  
  1523.    The general idea would be:
  1524.  
  1525.    - Trap for the DEPARTFIELD trigger
  1526.    - If you are departing the QTY Shown field :
  1527.       - Check if there is a value in the QTY Counted field.
  1528.          - Value found: Don't do anything
  1529.          - No value - Fill in with QTY Shown
  1530.  
  1531. #: 230218 S4/Forms/Handling Data ·
  1532.     28-May-93  10:59:02
  1533. Sb: #230200-Lookups
  1534. Fm: Tina Grubbe (Sysop) 76711,667
  1535. To: Don Wood 71024,537 (X)
  1536.  
  1537. The Valcheck |TableLookup will always come up in table view.  You can make
  1538. lookup tables come up in form view by hard coding the lookup in PAL and
  1539. removing the VALCHECK. Something like:
  1540.  
  1541. CLEAR
  1542. CLEARALL  ; starts us with a clean slate
  1543. view "lookup"
  1544. coedit "mytable"  ; puts the main table and the lookup on the workspace
  1545. pickform 1        ; Puts main table in formview
  1546.  
  1547. while true
  1548. wait table       ; Allows the user to see the table
  1549. prompt "Press F1 for lookup help",
  1550.        "Press F2 to save and exit"
  1551. until "F2", "F1"
  1552.  
  1553. switch
  1554.   case retval = "F2"    : Do_It! Quitloop   ; saves the changes and exits
  1555.                                             ; the script
  1556.   case retval = "F1"    : formkey           ;get out of formview
  1557.                           moveto "lookup"   ;go to lookup table
  1558.                           pickform 1        ;bring up form for lookup
  1559.                           wait table
  1560.                           prompt "Press F2 to copy data to main table"
  1561.                           until "F2"
  1562.                           if retval="F2"   ;copy data to main table
  1563.                              then
  1564.                                 copytoarray myarray
  1565.                                 moveto "mytable"
  1566.                                 copyfromarray myarray
  1567.                          endif
  1568. endswitch
  1569. endwhile
  1570.  
  1571.  
  1572. This example assumes that the field for that has the lookup is field one
  1573. in your main table.  If this was not the case, a person would need to write
  1574. PAL code to do the fill-in differently. This example is intended only to
  1575. get you pointed in the right direction.  It is not intended to be an exact
  1576. dictation of your code.  You will find the commands used in this example
  1577. documented in chapter 20 of the Paradox 3.5 PAL User's Guide.
  1578.  
  1579. #: 229238 S5/Queries/Reports ·
  1580.     23-May-93  17:29:43
  1581. Sb: Runtime Report Editing
  1582. Fm: James W. Horne 72130,3073
  1583. To: ALL
  1584.  
  1585. I am developing an application, which will run under runtime, and I want users
  1586. to have the ability to edit and/or write new letters that I provide them.  It
  1587. is small business management software and the type of business requires
  1588. customized contracts.  I want the users to be able to add or delete parts of
  1589. standard contracts as well as maybe the ability to  add a new contract.  Of
  1590. course these contracts will have field drops in them..
  1591.  
  1592. Anyone with input on how Pdox handles this problems or if it does not, maybe
  1593. asolution....
  1594.  
  1595. Fm: larry bradshaw 73777,2741
  1596.  
  1597.    I'ld use a table structure with one record for each paragraph in the
  1598.    contract, as the detail table for a master table with one record for
  1599.    each contract.  Then the paragraph or item # can be printed in the
  1600.    report or file by whatever calcs you need.
  1601.  
  1602. #: 229267 S5/Queries/Reports ·
  1603.     23-May-93  22:20:56
  1604. Sb: #229205-Dollar signs
  1605. Fm: Harry Goldman (TeamB) 75300,1733
  1606. To: Brian Bushay (TeamB) 76711,516 (X)
  1607.  
  1608. >>I haven't tried this in 4.0x, but I believe that in previous versions, the $
  1609. >>had to be the first operator: E$C.
  1610. >
  1611. >It hasn't made a difference in any version of Paradox I have used.
  1612.  
  1613. OK, maybe I'm just suffering from lack of sleep, but I could have sworn that
  1614. there was a problem at one time with the E operator where certain modifiers
  1615. had to be in a specific order to make it work correctly.
  1616.  
  1617. #: 229294 S5/Queries/Reports ·
  1618.     24-May-93  01:45:37
  1619. Sb: wordwrap proc
  1620. Fm: peggy baker 71141,1342
  1621. To: Brian Bushay 76711,516 (X)
  1622.  
  1623. Brian:  I have modified your wordwrap script slightly and am using it with
  1624. many thanks and even with general success.  However, occasionally I run into a
  1625. field which confuses the proc, throwing it into an endless loop.  Below is the
  1626. modification.  It is called as
  1627.  
  1628. wrapcount.n = ww5(mem.v,5,63,mem.y)
  1629.  
  1630. Here is the contents of a memo field which seems to blow it away:
  1631.  
  1632.   Leak in garage ceiling notified leak in vicinity of garage opener at celing
  1633.   Contact to inspect exact location for correction.
  1634.  
  1635. Disregarding the fact that they can't spell, there doesn't seem to be anything
  1636. I can figure out which would hang this up.  Any ideas?
  1637.  
  1638. ; Disguised as WordWrapThis5 ;
  1639. ;======================================================================== Proc
  1640. WordWrapThis5(text.a,lns.n, wid.n,ww.y)  ;Dynarray to place word wrap lines
  1641. into
  1642.      text.a = ""+text.a ;if this is a memo var this line will reset its
  1643.                         ;character index is a problem in low memory
  1644.                         ;situations after a RUN command
  1645.      startchr.n = 1         ;starting character possition
  1646.      wid.n = Min(wid.n,255) ;width can not exceed 255
  1647.       countno.n = 13
  1648.  
  1649.   For cntr from 1 To lns.n
  1650.     ww.y[cntr] = ""     ;init dynarray element
  1651.     takeChrs.n = 0      ;Initialize at 0
  1652.     trimChr.n = 0       ;Initialize at 0
  1653.     Switch
  1654.       Case SearchFrom("\n",text.a,startchr.n) > 0 And ;look for carrige return
  1655.            SearchFrom("\n",text.a,startchr.n) < (startChr.n+wid.n):
  1656.            takeChrs.n = SearchFrom("\n",text.a,startchr.n)- (startchr.n-1)
  1657.            trimChr.n =  1
  1658.       Case (startChr.n + wid.n) > Len(text.a): ;no more word wrap needed
  1659.            takeChrs.n = wid.n
  1660.       OtherWise:  ;need to find next space to break at
  1661.         While true
  1662.           spacePos.n =  SearchFrom(" ",text.a,startChr.n+takeChrs.n)
  1663.           Switch
  1664.             Case (spacePos.n - (startchr.n-1)) > wid.n :
  1665.               If takeChrs.n = 0 then
  1666.                  takeChrs.n = wid.n ;this section can not be broken at a space
  1667.               Endif
  1668.             Quitloop
  1669.           OtherWise:
  1670.             takeChrs.n = spacePos.n - (startchr.n-1)
  1671.           EndSwitch
  1672.         EndWhile
  1673.     EndSwitch
  1674.           ww.y[cntr] = Substr(text.a,startChr.n,takeChrs.n-trimChr.n)
  1675.           startChr.n = startChr.n +takeChrs.n   ;rest var
  1676.           If startChr.n > Len(text.a) then Quitloop Endif  ;all wrap lines set
  1677.   Endfor
  1678.  Return cntr
  1679.  
  1680. EndProc
  1681.  
  1682. Fm: Brian Bushay (TeamB) 76711,516
  1683.  
  1684.    >I have modified your wordwrap script slightly and am using it with
  1685.    >many thanks and even with general success.
  1686.  
  1687.    What do you mean by modified slightly?
  1688.  
  1689.    Someone else found a similar problem that I corrected and uploaded a
  1690.    corrected version.  You appear to have the original.
  1691.    The change occurs in the second line of the code below
  1692.  
  1693.    ;          Switch
  1694.    ;            Case (spacePos.n - (startchr.n-1)) > wid.n  or spacePos.n =
  1695.      0:  ;              If takeChrs.n = 0 then ;                 takeChrs.n
  1696.    = wid.n ;this section can not be broken at a space ;              Endif
  1697.    ; Quitloop ;            OtherWise:  ;              takeChrs.n =
  1698.    spacePos.n - (startchr.n-1) ;          EndSwitch
  1699.  
  1700.    Let me know if that fixes the problem
  1701.  
  1702. Fm: peggy baker 71141,1342
  1703. To: Brian Bushay (TeamB) 76711,516 (X)
  1704.  
  1705.    >>What do you mean by modified slightly?
  1706.  
  1707.    I needed it to print some borders and other stuff, so it has to figure
  1708.    out the word wrap and then how many spaces to throw in before the
  1709.    borders etc.
  1710.  
  1711.    Your fix did the trick.  Thanks a bunch.
  1712.  
  1713. #: 229323 S5/Queries/Reports ·
  1714.     24-May-93  08:52:14
  1715. Sb: TWO QUESTIONS
  1716. Fm: brian walker 71327,2532
  1717. To:  76711,516 (X)
  1718.  
  1719.         Two questions:
  1720.  
  1721.         ONE-How can you get a report to print percentages?
  1722.             The way my report now looks is that everyting
  1723.             is that all figures are rounded up to the nearest
  1724.             whole number.
  1725.  
  1726.         TWO-Is there a way to write a query that selects only the
  1727.             fields that have data in them.  I have a database where
  1728.             not all the fields have data in them (yet).  Is it easier
  1729.             just to scan the file and look for empty fields and not
  1730.             select them?
  1731.  
  1732. Fm: Les Gainous 72731,146
  1733.  
  1734.    RE:  How can you get a report to print percentages? The way my report now
  1735.    looks is that everyting is that all figures are rounded up to the nearest
  1736.    whole number.
  1737.  
  1738.    If you are using PAL, use: ROUND(yourPercentage,2)
  1739.  
  1740.    This will output your percentage rounded to two decimals.
  1741.  
  1742.    If you are using the report generator, Reformat your field with two
  1743.    decimal places.
  1744.  
  1745. Fm: Brian Bushay (TeamB) 76711,516
  1746.  
  1747.    >        ONE-How can you get a report to print percentages?
  1748.    >            The way my report now looks is that everyting
  1749.    >            is that all figures are rounded up to the nearest
  1750.    >            whole number.
  1751.  
  1752.    You have lost me with this question.  I don't know what rounding of decimal
  1753.    places has to do with percentages.  How about an example of what your trying
  1754.    to do?
  1755.  
  1756.    >        TWO-Is there a way to write a query that selects only the
  1757.    >            fields that have data in them.  I have a database where
  1758.    >            not all the fields have data in them (yet).  Is it easier
  1759.    >            just to scan the file and look for empty fields and not
  1760.    >            select them?
  1761.  
  1762.    The BLANK operator can be used to select for a blank field value
  1763.    NOT BLANK can be used to select for a non blank field value.
  1764.  
  1765. #: 229327 S5/Queries/Reports ·
  1766.     24-May-93  09:02:54
  1767. Sb: #229217-'IF' in reports &queries
  1768. Fm: Dan Ehrmann (TeamB) 70007,4644
  1769. To: James E. Arnold 71053,1503 (X)
  1770.  
  1771. I prefer your second approach, using a new field to hold the Date_In from the
  1772. previous record.  You may need to use a PAL scan loop to pick up those field
  1773. contents and move them down to the new field in the next record, but this
  1774. should be pretty easy.
  1775.  
  1776. Fm: James E. Arnold 71053,1503
  1777.  
  1778.    The SCAN loop works great.  Just had to assign a variable and type it
  1779.    into the next record.  Now the entire application runs in one giant
  1780.    Script without having to go to Paradox.
  1781.  
  1782. #: 229384 S5/Queries/Reports ·
  1783.     24-May-93  13:39:02
  1784. Sb: PARADOX 4.0 / DOS
  1785. Fm: DHAWKE 70303,2151
  1786. To: ?
  1787.  
  1788. Looking for a method in Paradox 4.0 for developing a two column report, from a
  1789. single field, with the following characteristics:
  1790.  
  1791.         1.   Sorted alphabetically down the page.
  1792.          2.   Grouped by A's, B's, C's etc...
  1793.  
  1794.      i.e.
  1795.  
  1796.          Aa             Ae
  1797.          Ab             Af
  1798.          Ac             Ag
  1799.          Ad
  1800.  
  1801.          Ba             Be
  1802.          Bb             Bf
  1803.          Bc             Bg
  1804.          Bd             Bh
  1805.  
  1806. Fm: Steve Caple (TeamB) 76711,520
  1807.  
  1808.    I'd probably do it all in PAL (hope that isn't bad news, but I don't
  1809.       think there's any easier way).
  1810.  
  1811.    One piece of information you need is the number of values in each initial
  1812.    letter group.  I think I'd start by looking at using a dynarray, reading
  1813.     the items in as I stepped through the table, stopping when the initial
  1814.    letter changed, and then printing out the items assembled in the
  1815.    dynarray.  I'd first try using a counter as the dynarray index.
  1816.  
  1817. #: 229395 S5/Queries/Reports ·
  1818.     24-May-93  14:07:56
  1819. Sb: query
  1820. Fm: Nancy A. Peterson 72143,2632
  1821. To: sysop (X)
  1822.  
  1823. trying to extract the maximum date for each item# on a table with fields item#
  1824. and date (multiple entries for item# with differing dates).  able to use set &
  1825. max operators, but have to key in an item# in query, which i don't want to do.
  1826. suggestions please.
  1827.  
  1828. Fm: Brian Bushay (TeamB) 76711,516
  1829.  
  1830.    >trying to extract the maximum date for each item# on a table with
  1831.     fields item# >and date (multiple entries for item# with differing
  1832.     dates).  able to use set &
  1833.  
  1834.    Yourtbl | Item #   | Date                   |
  1835.            | Check    | Calc Max as "Max Date" |
  1836.  
  1837. #: 229412 S5/Queries/Reports ·
  1838.     24-May-93  15:04:17
  1839. Sb: RPT PROB - REVISITED
  1840. Fm: T. Pat Kelly 6121,47
  1841. To: all
  1842.  
  1843. I need to start over on this previous raised and answered question.....I think
  1844. I'm in the forest looking for that lost tree; again.
  1845.  
  1846. To create a report to show the following:
  1847.  
  1848. 1. REQ. BY: AAAAAAAAA AAAAAAAAA           DATE: XX/XX/XX
  1849.   2. DATE OF REQ: XX/XX/XX              4. DATE REQUIRD: XX/XX/XX
  1850.  
  1851.   5 REQ'ING ORGANIZTN: AAAAAAAAAAAAAAA
  1852.   6. DEPART DTE: XX/XX/XX                   PRESENTN DATE: XX/XX/XX
  1853.  
  1854.   8.    <<<HERE'S THE PROBLEM>>>>
  1855.           X DBASE       _ LOTUS          _ VENTURA
  1856.           _             X SAS            _ MIRAGE
  1857.           _ QUATTRO PRO  _ EXCEL         X PARADOX
  1858.   (There are more selections than shown.  Person filling out can select 1 to
  1859.     N of them.  They go into a child table with a 2 field key....the id number
  1860.    from this parent table plus the other field in this child table...thus,
  1861.    2 fields; both = the key.
  1862.  
  1863.    9. <<<<same sort of problem>>>>
  1864.  
  1865.    __ CLIPART       __ HARDCOPY       __ GRAPHICS
  1866.    1  MAPS          __ TABLES          3 TEXT
  1867.    __ SCANNED        2 TRANSPARENCY   __ SLIDES
  1868.  
  1869.  (SAME SITUATION... CHILD TABLE OF 2 FIELDS...BOTH FIELDS = KEY.
  1870.    USER can add any combination of items.
  1871.  
  1872. I query the parent and 2 child tables; get answer table and write it to my
  1873. report table.  PROBLEM:  I can not create a reprot form that provides for the
  1874. multi records....they being ONLY #'s 9 & 8.
  1875.  
  1876. Is the answer that I have to restructure the parent table to provide a field
  1877. for each possible selection and get rid of the child tables for 8 & 9?
  1878.  
  1879. I've exhaused every trick I know to create a report form in both TABULAR and
  1880. FreeForm to get the multianswer fields (8 & 9), without any luck.
  1881.  
  1882. Fm: Brian Bushay (TeamB) 76711,516
  1883.  
  1884.    The only solution that you can use that will work with the report
  1885.      generator is to create an intermediary table.  This table needs to
  1886.    have all of the key values for all of the detail record.  Then fill it
  1887.    with Insert Queries
  1888.  
  1889.    Intermediate table something like this
  1890.  
  1891.    Parent Key   A#
  1892.    Question #   A1  ;will be either 8 or 9 in your case
  1893.    Description  A20  ;Lotus, Ventrua, Clipart ect
  1894.  
  1895.    Now write the report from this table.  Link the master to it.  Use a
  1896.    Group band to separate the different [Question #] records.  Use IIF()
  1897.    in headings to get the proper heading for the grouping
  1898.  
  1899.    Your other alternative is a PAL report using PRINT for output
  1900.  
  1901. #: 229415 S5/Queries/Reports ·
  1902.     24-May-93  15:16:13
  1903. Sb: TWO (Plus one) QUESTIONS
  1904. Fm: brian walker 71327,2532
  1905. To:  76711,516 (X)
  1906.  
  1907.         RE: 229323--------
  1908.         On the screen I have a number .23 which represents 23%.
  1909.         When I print that number, it appears as a 1 or 0, (I can't
  1910.         remember which).
  1911.  
  1912.         RE: 229323 question two.....................
  1913.         I tried NOT BLANK and it does not work in this instance.
  1914.         Once again, I have perhaps 30 fields of which about half
  1915.         are now populated.  I only want to view the fields with
  1916.         data in them.
  1917.  
  1918.         A new problem............
  1919.         I have a date field.  In the past I have inputed
  1920.         "12/12/93".  When I do that now, I get an error message
  1921.         "Incomplete field".  Paradox is looking for a 3rd digit
  1922.         in the year field (12/12/093 for example).  Any solutions?
  1923.  
  1924.         Lastly,
  1925.         I tried calling your technical support hotline (408) 461-9155
  1926.         and received a message saying the line is disconected.
  1927.         Is this true?
  1928.  
  1929. Fm: Brian Bushay (TeamB) 76711,516
  1930.  
  1931.    >        On the screen I have a number .23 which represents 23%.
  1932.    >        When I print that number, it appears as a 1 or 0, (I can't
  1933.    >        remember which).
  1934.    Use MENU {Field}{Reformat} to adjust the field to display the required
  1935.    number of decimal places.
  1936.  
  1937.  
  1938.    >        I tried NOT BLANK and it does not work in this instance.
  1939.    >        Once again, I have perhaps 30 fields of which about half
  1940.    What do you consider a blank record?
  1941.  
  1942.    If what your asking for is only those records where all of the fields are
  1943.    filled in then you would put NOT BLANK in every field
  1944.  
  1945.  
  1946.    >        Once again, I have perhaps 30 fields of which about half
  1947.    >        are now populated.  I only want to view the fields with
  1948.    >        data in them.
  1949.    Since Queries return records, not fields I guess I don't understand what
  1950.    you mean by the above, how about an example?
  1951.  
  1952.  
  1953.  
  1954.    >        "12/12/93".  When I do that now, I get an error message
  1955.    >        "Incomplete field".  Paradox is looking for a 3rd digit
  1956.    You must have placed a Picture {Valcheck} on that date field that is
  1957.    requiring more than a 2 digit year
  1958.  
  1959.  
  1960.    >        I tried calling your technical support hotline (408) 461-9155
  1961.    >        and received a message saying the line is disconected.
  1962.    >        Is this true?
  1963.  
  1964.    Not that I know of.  I don't work for Borland.  I am a volunteer.  My
  1965.    call to the above number to check got a busy single, not a Disconnect
  1966.    message.
  1967.  
  1968. #: 229561 S5/Queries/Reports ·
  1969.     25-May-93  00:53:40
  1970. Sb: #228879-print but nada comes out
  1971. Fm: Jeremy Grand [SSI] 73457,2674
  1972. To: Thomas P Knox 70410,764 (X)
  1973.  
  1974. It appears that novell is being confused by paradox, but the details still
  1975. elude me.  Possibly SETPRINTER is doing something?  Both printers work fine
  1976. most of the time, and both are in the same room with me and the server.  No
  1977. other applications have caused this problem.
  1978.  
  1979. I have modified the code to send reports to a file first, but the problem
  1980. persists.
  1981.  
  1982. Fm: Thomas P Knox 70410,764
  1983.  
  1984.    Are you sure that when you are running Paradox that you have an active
  1985.    print queue as defined with a CAPTURE statement?  On another
  1986.    workstation, can you watch PCONSOLE to see your job queue?
  1987.  
  1988. Fm: Jeremy Grand [SSI] 73457,2674
  1989. To: Thomas P Knox 70410,764 (X)
  1990.  
  1991.    Thomas, yes, I can watch the console & see the print jobs appearing and
  1992.    disappearing.  They show up for a few moments, then vanish.
  1993.  
  1994. Fm: Thomas P Knox 70410,764
  1995. To: Jeremy Grand [SSI] 73457,2674
  1996.  
  1997.    Well, I'm sorta stumped.  If you have output that goes into the queue and
  1998.    leaves the queue, then it's logical to expect to see it in the printer.  If
  1999.    you have other applications printing to the same queue from the same PC then
  2000.    something is wrong somewhere.
  2001.  
  2002.    What I would do at this point is start at ground zero:
  2003.  
  2004.    - reboot computer (cold boot)
  2005.    - login to net
  2006.    - issue CAPTURE to queue
  2007.    - at DOS copy a text file (plain text, no setup strings) to LPT1
  2008.       = if it came out at printer continue, if not call net admin
  2009.    - start Paradox and print a simple report for Report Generator
  2010.       = if it came out, continue, if not call net admin
  2011.    - if Paradox can send a simple report, try your app that creates a file
  2012.       and send the file to the printer.
  2013.       = if this doesn't work, but the rest did then:
  2014.       - did this file end with a form feed?
  2015.       - is the printer on line?
  2016.       - is the data stuck in the printer's buffer (or other spooler)?
  2017.       - is there an odd or errant printer code in the file causing the
  2018.          printer to not print.
  2019.    - if you get to this point and still no luck, send me a copy of the file
  2020.       that you see in the queue, but doesn't come out of the printer.
  2021.  
  2022. #: 229593 S5/Queries/Reports ·
  2023.     25-May-93  09:17:14
  2024. Sb: #229534-offset columnar repor
  2025. Fm: Franchesca Chandler 70703,1046
  2026. To: Steve Caple (TeamB) 76711,520 (X)
  2027.  
  2028.  I'm again working with linked tables of shop work orders.  The master
  2029.  table is a table of work orders, with linked detail tables of parts and
  2030.  labor.
  2031.  The client wants finished job orders printed on a custom pre-printed form
  2032.  with this format, and the common information is the job order number.  I'm
  2033.  trying to print the informatio in this offset manner
  2034.  
  2035.  Qty.    part #  Description     cost amt.
  2036.  --- ---------- ---------------- ---- ----      tech    repair
  2037.  --- ---------- ---------------- ---- ---- time  no. instructions   code amt.
  2038.  --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
  2039.  --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
  2040.  --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
  2041.  --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
  2042.  --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
  2043.  
  2044.  I still have your outer-join solution from when I first asked about this
  2045.  problem, but I'm confused.
  2046.  I created two small sample tables.
  2047.  A:
  2048.  ----Job Order----Quantity----Part number-----Part Desc-----Cost--------
  2049.  1 : M20        :  2.       : 11119       : widget        :       2.25 :
  2050.  2 : M20        :  2.       : 33666       : Belt          :       3.50 :
  2051.  3 : M20        :  3.       : 22334       : other         :       5.25 :
  2052.  
  2053.  B:
  2054.  --------Job Order----Operation------------Description-------Mech
  2055.  1 : M20        : 1         : lubricate and inspect    : 2   :
  2056.  2 : M20        : 14        : valve lash adj           : 6   :
  2057.  
  2058.  Either way I query them I get six records and don't see how to use what I
  2059.  get there are no blank records that I can make use .  Can you help me?
  2060. (again)
  2061.  
  2062. Fm: Brian Bushay (TeamB) 76711,516
  2063.  
  2064.    Sorry but your report layout falls into the "Can't do it with the Report
  2065.    generator" category.  The reason is that there is no way to relate which
  2066.    record in Table A goes with a record in Table B
  2067.  
  2068.  
  2069.    > Qty.    part #  Description     cost amt.
  2070.    > --- ---------- ---------------- ---- ----      tech    repair
  2071.    > --- ---------- ---------------- ---- ---- time  no. instructions   code amt.
  2072.    > --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
  2073.  
  2074.    The drop down header you have on the right is also a problem.
  2075.    Your going to have to write PAL code to produce this one with PRINT commands
  2076.  
  2077. Fm: Steve Caple (TeamB) 76711,520
  2078.  
  2079.    I don't think there is meant to be any relation between the parts and labor
  2080.    lines - at least there never is on any of my garage receipts.
  2081.  
  2082.    My approach to avoid the product problem (3 Parts recs * 2 Labor recs = 6
  2083.    Answer recs) would be to:
  2084.  
  2085.    * query out the Parts and Labor recs for a given order; include a "calc 1
  2086.       as Line Nbr" in one of the fields
  2087.  
  2088.    * rename both tables to something temporary
  2089.  
  2090.    * insert 2 "blank" recs (work order # only) at the start of the Labor
  2091.       answer, and
  2092.  
  2093.    * get both table sizes
  2094.  
  2095.    * if the Parts answer size was less than the Labor answer size (note:
  2096.       includes the recently added "blank" records), add enough blanks at the
  2097.       END of the Parts answer table to equal that number
  2098.  
  2099.    * SCAN both tables changing the Line Nbr field to recno()
  2100.  
  2101.    * NOW - INSERT query the parts answer table (it is always either larger or
  2102.       the same size as the labor answer) into an emptied report holder, then
  2103.       CHANGETO query (matching on Line Nbr) the labor field info into place
  2104.  
  2105.    * run the report, linking in order material via work order #
  2106.  
  2107.  
  2108.    I know it seems like a lot of steps, but it can go surprisingly fast - keyed
  2109.    and small it should really fly.
  2110.  
  2111.  
  2112.    >> Franchesca:  I could not find the earlier reply, it must be before
  2113.                   March 92 (I only have back a year).
  2114.  
  2115. #: 229609 S5/Queries/Reports ·
  2116.     25-May-93  10:05:56
  2117. Sb: Wildcard Delete Query
  2118. Fm: CRAIG ADAMS 72002,1471
  2119. To: craig adams
  2120.  
  2121. I am using Paradox 3.5 and trying to compose a query.  What I am doing is the
  2122. following:
  2123.  
  2124. 1. Setting a variable called deletetext to the following:
  2125.    deletetext="..tkmusa0c.." 2. Doing a query using the variable as follows:
  2126.    Query
  2127.  
  2128.     Labfile | Text    |
  2129.     delete  | ~deletetext|
  2130.  
  2131.    Endquery Now, if I type in this query and enter the text manually it
  2132. deletes the appropriate records.  But when I do it this way I get an empty
  2133. DELETED table. Is there any reason for this?
  2134.  
  2135. Fm: Brian Bushay (TeamB) 76711,516
  2136.  
  2137.    >    Labfile | Text    |
  2138.    >    delete  | ~deletetext|
  2139.  
  2140.    >Is there any reason for this?
  2141.  
  2142.    Because tilde variables can only represent literal values.  Wild cards
  2143.       can not be used within a tilde var
  2144.  
  2145.    What you need to do is
  2146.  
  2147.       Query
  2148.  
  2149.        Labfile | Text    |
  2150.        delete  |         |
  2151.  
  2152.       Endquery
  2153.       MoveTo [Text] Typein deletetext
  2154.       Do_it!
  2155.  
  2156. #: 229766 S5/Queries/Reports ·
  2157.     26-May-93  00:16:24
  2158. Sb: #228943-Export Ascii Fixed Field
  2159. Fm: Jeremy Grand [SSI] 73457,2674
  2160. To: Ross Williams 71344,3465
  2161.  
  2162. Download FLEXPORT.ZIP from one of the libs (forgot which one!).  With it you
  2163. can turn a .dbf file into a quote delimited, comma separated ascii file. Use
  2164. ExportImport/Export to turn your pdox table into a dbase .dbf file.
  2165.  
  2166. Flexport is pretty fast, and a whole lot simpler than making a report for this
  2167. purpose.
  2168.  
  2169. #: 229898 S5/Queries/Reports ·
  2170.     26-May-93  15:03:48
  2171. Sb: IIF
  2172. Fm: Cynthia Guinn 76264,1026
  2173. To: SYSTOP
  2174.  
  2175. I have a table with the fields: date, time, type.  Type is a flag for
  2176. different types of appointments.  I need to create a report that prints the
  2177. date and time on a condition from the type field.  I've been trying to use iif
  2178. but can't figure out how to do it without getting blanks.  Example:
  2179. iif([type]="INIT1",[date],"") will return the date but will also print
  2180. person's name on line with a blank for this field as well.  Help.
  2181.  
  2182. Fm: Dave Schlieder ( SLI ) 72460,3561
  2183.  
  2184.    You can not "Filter" a report in this fashion.  If you only want to report
  2185.    on records where [Type] = "INIT1", then the first step is to perform a query
  2186.    on the table such as this:
  2187.  
  2188.    {Ask} Select "MyTable"   ; replace "MyTable" with your table name
  2189.    CheckPlus                ; check off all of the field in the table
  2190.    [Type] = "INIT1"         ; select only those records where [Type] = "INIT1"
  2191.    Do_It!
  2192.    CopyReport "MyTable" "R" "Answer" "R"
  2193.    Report "Answer" "R"
  2194.  
  2195. #: 229958 S5/Queries/Reports ·
  2196.     26-May-93  21:04:05
  2197. Sb: AVERAGE
  2198. Fm: JOHN KLIEGL 70372,3007
  2199. To: ALL
  2200.  
  2201. I have 3.5
  2202. I have written a baseball report that averages at-bats and hits
  2203. the averages total (per player) print correctly.  My problem is that I want to
  2204. average total team-hits/ total team-at-bats and I can't get the correct avg.
  2205.  
  2206. example   AB   H   avg.(calculated)
  2207.          ______________________________
  2208.  
  2209.  name    100   24     .2400  -- calc field
  2210.  name    163   56     .3436  -- calc field
  2211.         _____________________
  2212. total    263   80      xxx --- I want xxx to be 80/263
  2213. |
  2214. calc field
  2215.  
  2216. If I sum the group 80+263 I get the correct answer but if I divide it I get
  2217. the wrong answer.....What Gives ???
  2218.  
  2219. Fm: Brian Bushay (TeamB) 76711,516
  2220.  
  2221.    Use a calculated field
  2222.  
  2223.    Sum([H],goup)/Sum([Ab],group)
  2224.  
  2225. #: 230106 S5/Queries/Reports ·
  2226.     27-May-93  17:16:13
  2227. Sb: Multi-tables vs. queries
  2228. Fm: Tom Bates 76427,353
  2229. To: ALL
  2230.  
  2231. If I design a truly normalized database, is that going to make it harder to do
  2232. moderately complex queries?
  2233.  
  2234. For example, if I have an inventory file that relates to a product file and a
  2235. location file, and I want to find all the inventory items that start with
  2236. "Inter" in "accounting", do I have to do several independent queries to get
  2237. what I want; i.e. query the product file for all products starting with
  2238. "Inter" and query the location file for all the accounting locations, then use
  2239. those keys to query the inventory file?  OR  can I use a multi-table form and
  2240. do a QBE?
  2241.  
  2242. P.S.  Oops, replace "file" with "table" in the above message....gotta get my
  2243. nomenclature right!
  2244.  
  2245. Fm: Bill Darron 70650,2212
  2246.  
  2247.    It sounds like you need to link the tables doing a query.
  2248.    If you have an inventory table with a part number, and a product table with
  2249.    a description amd the same part number field, as well as a location table that
  2250.    would tell you what bin the part was in (also uses the same part number) you
  2251.    could get the answer in one shot.  Maybe you have a series of tables:
  2252.  
  2253.    PRODUCTS.DB          INVENTORY.DB         LOCATION.DB
  2254.    Part Number  S*      Part Number  S*      Part Number  S*
  2255.    Description  A30     Quan Avail   S       Bin Number   S
  2256.  
  2257.    Then you could query:
  2258.  
  2259.    x= the part number you want to find
  2260.  
  2261.    Query
  2262.  
  2263.    Products  |  Part Number  |
  2264.             |  _1,~x        |
  2265.  
  2266.    Inventory |     Part Number    |
  2267.             |  Check  >0         |
  2268.  
  2269.    Location  |  Part Number  |  Bin Number |
  2270.             |  _1           |  Check      |
  2271.  
  2272.    Endquery
  2273.  
  2274.    If you were looking for part x, this query would tell you the location of
  2275.    the part if you had one or more, otherwise you would have an empty table.
  2276.  
  2277. #: 230198 S5/Queries/Reports ·
  2278.     28-May-93  08:47:14
  2279. Sb: Query Forms
  2280. Fm: Andrew Shimberg 73727,2270
  2281. To: ALL
  2282.  
  2283. Currently, we are using Paradox 4.0 for DOS.  We would like to create forms
  2284. (data entry screens) that allow users to enter information.  This information
  2285. will be inserted into queries to run on the relational database tables.  Is it
  2286. possible to create these forms that will accept data and place he information
  2287. into the appropriate places in the query.  If this is possible, whatis the
  2288. proper approach.  I appreciate your assistance.
  2289.  
  2290. Fm: David J Murphey (Sysop) 76117,1032
  2291.  
  2292.    I use a dialog box to accept values for fields and then assign those
  2293.    values to a query form.
  2294.  
  2295. Fm: larry bradshaw 73777,2741
  2296. To: David J Murphey (Sysop) 76117,1032
  2297.  
  2298.    I presented an advanced approach to this,  a hybrid of Query by Form and
  2299.    Query by Dialog which only allows the entry of existent query criteria
  2300.    IE field contents placed in the query must exist in the target table(s).
  2301.    Which means that if a city is spelled four times in the target table it
  2302.    appears four times in the criteria picklist!   Also, the query criteria,
  2303.    once selected,  are saved as a query criteria selection set,  on query
  2304.    criteria to a field,  in a table "Settings.DB" and are available for
  2305.    later use - either for the same report or a different report.
  2306.  
  2307.    It's in LIB7 (as I recall),  and is named "Cis_App.Zip".  With over 3500
  2308.    lines of Paradox 4.0 source code,  utils and Waitproc and DialogProc
  2309.    examples,  I hope it is a useful donation to the Paradox development
  2310.    community.  It is free;  all source code is included.  Downloaded
  2311.    several hundred times the last time I looked.
  2312.  
  2313.    BTW,  the objective of this training application is to provide a system
  2314.    whereby CIS messages may be stored in Pdox tables in memo fields &
  2315.    retrieved.  'Course exercises are left to the student & many other uses
  2316.    of this technology exist.
  2317.  
  2318. Fm: Brian Bushay (TeamB) 76711,516
  2319.  
  2320.    >If this is possible, whatis the proper approach. I appreciate your
  2321.    >assistance.
  2322.  
  2323.    This is generally referred to a Query by form.  It requires that you use
  2324.    PAL to get the information from the form to the Query.  If you download
  2325.    Danutl.exe from lib 7 there is an Example in there of how to program the
  2326.    technique.
  2327.  
  2328.    QryDlg.zip is a related subject for Query by DialogBox.
  2329.  
  2330. Fm: Dan Ehrmann (TeamB) 70007,4644
  2331.  
  2332.    You can easily use forms or dialog boxes to accept selection criteria
  2333.    which are then inserted into the underlying query images using PAL.
  2334.  
  2335.    Use an "analog" table with alpha fields in place of the N and D fields,
  2336.    so that ranges can be entered by your users.  Use a Wait Record to limit
  2337.    dataentry to one record.  Grab the results using a CopyToArray, then
  2338.    display a query image and walk the fields, doing a "TypeIn" on any
  2339.    non-blank array element into its field.  Be sure to check the Window()
  2340.    after Do_It! in case the query was invalid.  For safety, check and
  2341.    remove the CHANGETO operator if it was typed in by the user.
  2342.  
  2343.    For more information, you might want to get hold of a copy of my
  2344.    recently published book, "Paradox Queries - A Developer's Reference",
  2345.    which discusses these techniques extensively.  You can find it at your
  2346.    local bookstore, or call 312-663-0101 to order a copy from my office.
  2347.  
  2348. #: 230545 S5/Queries/Reports ·
  2349.     31-May-93  18:34:08
  2350. Sb: Control field squeeze?
  2351. Fm: Gerry Eichner 71052,2400
  2352. To: All
  2353.  
  2354.     We have a Membership Table with [Last name] and [First name] fields.  I'm
  2355. trying to get a free-form that mimics a regular columnar report, allows the
  2356. two name field to "squeeze", but doesn't allow the keeps the other reports in
  2357. their proper columns.
  2358.  
  2359.    If there isn't a way for me to control field squeeze, then the only other
  2360. way I see(if there are other easier ways, please, tell me) is to get the two
  2361. name fields to come together into a single field in a new table with a
  2362. different structure.
  2363.  
  2364.   NAME               ADDRESS          CITY         \
  2365.   Smith, John        123 Drive Dr.    New York      | what I'd like
  2366.   Jones, Sue         456 Road Rd.     Hoboken      /
  2367.  
  2368.   Smith, John 123 Drive Dr. New York              \   what I get at present
  2369.   Jones, Sue 456 Road Rd. Hoboken                 /
  2370.  
  2371. Fm: Steve Erbach (NEWPALS) 70620,3432
  2372.  
  2373.    You can use a Calculated field for the name:
  2374.  
  2375.      [Last name] + ", " + [First name]
  2376.  
  2377.    Note that the comma and space are placed in quotation marks.  The other
  2378.     fields may be placed as regular fields.  You can leave Field Squeeze
  2379.     off.
  2380.  
  2381. Fm: Brian Bushay (TeamB) 76711,516
  2382.  
  2383.    Do not use FieldSqueeze.  For the fields you want to be together use a
  2384.    Calculated field.
  2385.  
  2386. Fm: Harry Goldman (TeamB) 75300,1733
  2387.  
  2388.    You will need to use a slightly more complex calculated field to do what
  2389.     you want:
  2390.  
  2391.    Format("W30,AL",IIF(Not Isblank([First_Name]),[First_Name] + " " +
  2392.                        [Last_Name],[Last_Name]))
  2393.  
  2394.    Notes:
  2395.  
  2396.    (1) This should all be on one line.
  2397.    (2) Change the format width (the "W" parameter) to the size you need
  2398.    (3) Change the field names as needed
  2399.  
  2400. Fm: John B. Moore (TeamB) 71333,1775
  2401.  
  2402.    Place the Lastname/Firstname in a calc field.. It will look like this..
  2403.  
  2404.     [LastName]+", "+[FirstName]
  2405.  
  2406. Fm: Harry Goldman (TeamB) 75300,1733
  2407.  
  2408.    The problem with [Field1] + [Field2] is that they do not force a fixed area
  2409.    to be allocated to the field. You said that you wanted field squeeze, but
  2410.    that you wanted columns to. Using that method you will get:
  2411.  
  2412.    Field1 Field2          Field10 Field11
  2413.    Field3 Field4              Field12 Field13
  2414.    Field5 Field6            Field14 Field15
  2415.  
  2416.    Both columns are squeezed, but they are not properly alligned.
  2417.  
  2418.    Using the FORMAT() function will set aside a fixed area for each field
  2419.    combination and thus allow for proper formatting of the columns as well as
  2420.    squeezing teh fields.
  2421.  
  2422.    Fm: Steve Erbach (NEWPALS) 70620,3432
  2423.  
  2424.       Harry, fussbudget that he is, has given you the most all-encompassing solution
  2425.       to your question.  His method avoids the acute embarrassment you would feel if
  2426.       any of the [First name] fields in your table were blank.  His method can be
  2427.       applied to your requirement of placing the [Last name] first as well:
  2428.  
  2429.       FORMAT("W30", IIF(ISBLANK([First name]), [Last name], [Last name] +
  2430.                ", " + [First name]))
  2431.  
  2432.       So, if any of the [First name] fields _were_ blank, you would not see the
  2433.       following on your reports:
  2434.  
  2435.       Name
  2436.       -------------------------------------
  2437.       Adams, Roger
  2438.       Bradley, Will
  2439.       Carson,
  2440.       Dowd,
  2441.       Everhard, James
  2442.       ...
  2443.  
  2444. #: 230640 S5/Queries/Reports ·
  2445.     01-Jun-93  08:10:54
  2446. Sb: PRINT
  2447. Fm: Garrett Mattingly 76150,2427
  2448. To: ALL
  2449.  
  2450. Has there been any change in the way Paradox handles PRINT commands in 4.0 ?
  2451. One of our developers here says that a chunk of code that had been working
  2452. under 3.5 no longer works under 4.0.  Specifically he says that something
  2453. like:
  2454.          PRINT setup_string
  2455.          REPORT "MYTABLE" 1
  2456.  
  2457. Does not work.  (ie. The setup string gets ignored.)  We know that we can
  2458. place calculated fields etc.  We are curious as to whether anyone has some
  2459. insight.
  2460.  
  2461. Fm: Brian Bushay (TeamB) 76711,516
  2462.  
  2463.    >Has there been any change in the way Paradox handles PRINT commands in 4.0 ?
  2464.  
  2465.    >         PRINT setup_string
  2466.    >         REPORT "MYTABLE" 1
  2467.  
  2468.    There were no changes in PRINT that I know of.  Are you sure you had this
  2469.    working in 3.5?
  2470.  
  2471.    If your reading setup_string from a [field] you probably getting the literal
  2472.    character values in the variable.  "\027"  is the escape character if this
  2473.    value is in a string.  But if the value is in a field its just a 3 ASCII
  2474.    characters.
  2475.  
  2476. #: 230681 S5/Queries/Reports ·
  2477.     01-Jun-93  14:35:24
  2478. Sb: Matching in a Query
  2479. Fm: Doug Walker 75360,2004
  2480. To: All
  2481.  
  2482. I am looking for a way to find matches in a query. What I have is a table with
  2483. all of the answers for different courses. I then have the person answer in
  2484. another table. now I would like to be able to compare these 2 tables and come
  2485. up with the matches and where they are wrong.
  2486.  
  2487. Is there a way to do this with a query??
  2488.  
  2489. Fm: Brian Bushay (TeamB) 76711,516
  2490.  
  2491.    That seems to fit the description of a not In Query
  2492.  
  2493.    Table1  | Course #    | Answer              |
  2494.            | _C, Count=0 | _a                  |
  2495.  
  2496.    Table2  | Course #   | Answer              |
  2497.            | Check _C!  | Check _a!           |
  2498.  
  2499. #: 230682 S5/Queries/Reports ·
  2500.     01-Jun-93  15:13:57
  2501. Sb: Delete query
  2502. Fm: Ben Shulman 74017,2146
  2503. To: all
  2504.  
  2505. I need to construct a query that will delete records from a child table that
  2506. have no matching master record in the parent table. There is only one key
  2507. field to link on. For example, I have a project table that has one record per
  2508. project, and a room table that can have many rooms per project. How can I run
  2509. a delete query to delete all rooms that have no matching record in the project
  2510. table?
  2511.  
  2512. Fm: Brian Bushay (TeamB) 76711,516
  2513.  
  2514.    I don't believe that is possible with a Query.  You can use a Not In
  2515.    query to get the records that are not in the Child table then use
  2516.       SUBTRACT to remove them from the Parent table
  2517.  
  2518.    Master  | Key       | Other fields  |
  2519.            | Check _k! |  Check        |
  2520.  
  2521.    Child   | Key         |
  2522.            | _k, count=0 |
  2523.  
  2524.    Now Subtract Answer from Master
  2525.  
  2526.    >The example you suggest will only delete a parent if it has no children.
  2527.    >Query can't do it, huh? Too bad.
  2528.  
  2529.    Just reverse that table names in the example I sent.
  2530.  
  2531. #: 230692 S5/Queries/Reports ·
  2532.     01-Jun-93  16:01:34
  2533. Sb: Sub & Supersets
  2534. Fm: MICHAEL J. VALENTI 75230,2004
  2535. To: Sysop (X)
  2536.  
  2537. I'm working on a report in which a group footer totals have to computer
  2538. percentages based both on superset of the detail table and several distinct
  2539. subsets of the detail table (i.e. sub-totals based on a status code field in
  2540. the detail  table band. For a variety of reasons, I prefer to avoid using PAL
  2541. and was hoping to generate a set of answer tables representing each sub or
  2542. superset, and then using linked calculated fields. I've never attempted this
  2543. particular approach before (look ma, no net) and just wondered if it seems
  2544. basically practical before proceeding. Would appreciate comments or
  2545. suggestions.
  2546.  
  2547. Fm: Brian Bushay (TeamB) 76711,516
  2548.  
  2549.    If your grouping on the field that you want to do the subtotals on then
  2550.       it may be feasible.  Just remember that the report generator is a one
  2551.    pass operation.  So the Total for a grouping is not available until the
  2552.    last record of the Group is processed.  If you need a total before that
  2553.    you will have to do it in a query before the report and either assign
  2554.    that value to a variable or get the value/s into a table that you can
  2555.    link as a lookup.
  2556.  
  2557.    That's all the advice I can give with out knowing more details on your
  2558.      data and how you want the report laid out.
  2559.  
  2560. Fm: MICHAEL J. VALENTI 75230,2004
  2561.  
  2562.    Thanks. Your response pretty much validated my feelings. Now for my daily
  2563.    idiot question. How does one frame a general query to select records
  2564.     from the current "period"? Obviously, specifying something like >6/1/93
  2565.     works in ad hoc mode; but what if a general saved query is required for
  2566.    use in scripts. Tilde variables at least supported an at "runtime"
  2567.    solution to this problem in 3.5 but I see no reference to tilde variable
  2568.    in 4.0.  Have they been abandoned?  What was meant to replace them?
  2569.    What's a poor boy to do? How can I ever accomplish this task? (I think
  2570.    you get the drift %-})
  2571.  
  2572. %: 229869 S1/New Users/Misc
  2573.     26-May-93  09:17:40
  2574. Sb: #229848-Dialog restrictions?
  2575. Fm: Brian Bushay (TeamB) 76711,516
  2576. To: RANDY SINCLAIR 76450,1507
  2577.  
  2578. >QUESTION:  What is the best method for data entry where speed is the driving
  2579. >factor?
  2580.  
  2581. Any answer of this will depend on the particular circumstances of your data
  2582. entry Using Dialog boxes instead of Forms will give you a small speed gain
  2583. by not having to open the form. For a Complex form it can take a few seconds
  2584. to open. However your not going to be able to produce a Dialogbox as complex
  2585. as a form with multiple embeded tables so I don't think the time saving is
  2586. significant. There are more triggers available in a Wait than a Dialog box
  2587. so if your data needs any type of Validation using a WAIT is probably faster
  2588. for data entry.
  2589.  
  2590. >I use a data entry table to protect the real database tables from corruption.
  2591.  
  2592. If your users are in the habit of rebooting in the middle of a data entry
  2593. session your technique should help.
  2594.  
  2595. #: 230766 S5/Queries/Reports ·
  2596.     01-Jun-93  21:59:48
  2597. Sb: Finding Duplicates
  2598. Fm: Kate Atkins 71730,1235
  2599. To: sysop
  2600.  
  2601. Is there a query that will bring up only the records that have a duplicate in
  2602. a specific field?  We have a barcode table of 124,486 records, but only
  2603. 124,361 of those records have unique barcode numbers.  Is there a query that
  2604. will locate the duplicate barcode numbers for us??   Thanks    - Kate
  2605.  
  2606. Fm: Harry Goldman (TeamB) 75300,1733
  2607.  
  2608.    You can locate the duplicates with a CALC COUNT query:
  2609.  
  2610.    Yourtable  | Barcode              |  ...
  2611.    ---------------------------------------------------------
  2612.               | Check count > 1      |
  2613.  
  2614.    If you want to see not only the barcodes, but also the number of
  2615.    occurances change the above to:
  2616.  
  2617.         Count >1, Calc count all
  2618.  
  2619. Fm: Brian Bushay (TeamB) 76711,516
  2620.  
  2621.    >Is there a query that
  2622.    >will locate the duplicate barcode numbers for us??
  2623.  
  2624.    Yes
  2625.  
  2626.    YourTbl | BarCode         | Other fields    |
  2627.            | Check _B        | Check           |
  2628.            | _B Count All >1 |                 |
  2629.  
  2630.    Use this query some care.  It should work fine for your purpose but if
  2631.      your using it on a table with lots of duplicates or individual values
  2632.    it probably will run out of disk space.
  2633.  
  2634. #: 230980 S5/Queries/Reports ·
  2635.     02-Jun-93  20:09:33
  2636. Sb: Network Report Printing
  2637. Fm: Andrew Sweet 71127,2346
  2638. To: All
  2639.  
  2640. I've written a small invoice program in Paradox 4.0.  I've created a single
  2641. page report that prints each invoice one at a time on a local printer.  When I
  2642. set up a capture to print from a Netware 3.11 print server, my invoice is
  2643. followed by a blank page.  I added the switch /no formfeed to my capture
  2644. command, but that didn't stop my invoice from being followed by a blank page.
  2645. Any one have a clue to what the problem might be?
  2646.  
  2647. Fm: Bill Darron 70650,2212
  2648.  
  2649.    Our LAN has an option that sends a form feed after each print job.  Some
  2650.    programs do it themselves, so that you end up getting a blank page after
  2651.    each report.  On our LAN, I have the same problem that you speak of
  2652.    whenever I print from Windows.  If I print from within Paradox, I need
  2653.    to issue a manual command to the Print Queue to begin printing after the
  2654.    "Sending Report to Printer" Message drops from the screen.  I have to
  2655.    press <Ctrl>+<Alt>+<*> to get the thing to start.  Because this is a
  2656.    manual process, I don't get the extra page.
  2657.  
  2658.    For any program that does "communicate" with the queue, I get the extra
  2659.    page.  Check with your system administrator about the options on your
  2660.    print server.
  2661.  
  2662.    (We have StarLAN (MS LAN Manager 2.0))
  2663.  
  2664. #: 231297 S5/Queries/Reports ·
  2665.     04-Jun-93  03:36:16
  2666. Sb: #231172-Running Total
  2667. Fm: Brian Bushay (TeamB) 76711,516
  2668. To: Mike Reilley 75555,1301 (X)
  2669.  
  2670. >Table 1 contains a Total Balance
  2671.  
  2672. >Table 2 contains detail records with an amount field to be subtracted from the
  2673. >total balance to get a remaining balance.
  2674.  
  2675. >Can some one help me to set up the calculation in the report
  2676.  
  2677. If your going to use both tables in a report you need a comon field to link
  2678. them on.   If table 1 only has one record you can set the TOTAL value to a
  2679. variable and use the variable in your report.
  2680.  
  2681. If you use a variable  then the calculated field would be
  2682.  
  2683. TotalBalance - [Amount]
  2684.  
  2685. #: 231350 S5/Queries/Reports ·
  2686.     04-Jun-93  12:20:15
  2687. Sb: Summary Field ??
  2688. Fm: Edward J. Krygeris 76106,2324
  2689. To: All
  2690.  
  2691. I am looking for a answer to generate a report. The problem is: I have a table
  2692. with 4 fields: Month,Date,$A,$B. Now I want to generate a report like this:
  2693.  
  2694.         Month: 01
  2695.                         Date       $A        $B       %Changes
  2696.  
  2697.                         2         100       100        0%
  2698.                         3          75        50       25%
  2699.        Monthly Total              175       150       17%   <======??
  2700.        ---------------------------------------------------------------
  2701.        Month:  02
  2702.                         Date       $A        $B       %Changes
  2703.  
  2704.                          16         6        12       -50%
  2705.                          23        10        10         0%
  2706.        Monthly Total               16        22       -27%  <====??
  2707.        -----------------------------------------------------------------
  2708.        Yearly  Total              191       172        11%
  2709.  
  2710. Question:  How can generate the Monthly total persentage chages(which the
  2711.            question mark is pointing to) with Paradox report generator?
  2712.  
  2713. Fm: Brian Bushay (TeamB) 76711,516
  2714.  
  2715.    Place a calculated field
  2716.       (Sum([$A],group)-Sum([$B],group))/Sum([$b],group)
  2717.  
  2718. #: 231482 S5/Queries/Reports ·
  2719.     05-Jun-93  01:47:25
  2720. Sb: Rpt on Screen from Scrpt
  2721. Fm: David  T. Burhans, Jr. 71234,103
  2722. To: Whomever
  2723.  
  2724. I can view a report on the screen interactively from Paradox by using the
  2725. {Report}{Output} ... {Screen} options from the main menu.  When I do that, I
  2726. get a nice report viewing menu which looks something like this:
  2727.  
  2728. = Go Search Cancel    {I especially like being able to go to a particular
  2729. page number or to the end of the report.}
  2730.  
  2731. When I execute the same set of commands from within a script:
  2732.  
  2733. MENU
  2734. {Report}
  2735. {Output}
  2736. SELECT RptName.a
  2737. SELECT RptNum.s
  2738. {Screen}
  2739.  
  2740. I do not get the nice menu above.  I really would like to.  Can you tell me
  2741. how to get that menu when executing the command from a script?
  2742.  
  2743. Fm: Brian Bushay (TeamB) 76711,516
  2744.  
  2745.    If you have a ShowPullDown defined you will not see the System menu.
  2746.    You can use ClearPulldown to clear your ShowPulldown.
  2747.  
  2748.    This will give you the report Previewer menu.  Once your in the Previewer
  2749.    you don't have any PAL control until the user exits.  I like more
  2750.    controle with my applications so I sent the report to a file and then
  2751.    use a routine that pulls the file into the Editor for viewing.
  2752.  
  2753.  
  2754. #: 228855 S7/PAL - Learning ·
  2755.     20-May-93  23:27:47
  2756. Sb: Time calculations
  2757. Fm: Fazur A. Estrada 72350,463
  2758. To: ALl
  2759.  
  2760. I am creating a production report in which the user will be entering the
  2761. following variables: a) startup time (Ex. 7:00 a.m.), b) Stop time (14:30
  2762. p.m.). I need to calculate how many hours that production run was (Ex. 7.3
  2763. hrs). Do you have any suggestions on how to do this calculation?, thanks for
  2764. your help.
  2765.  
  2766. Fm: Brian Bushay (TeamB) 76711,516
  2767.  
  2768.    To do time arithmetic you have to break time down to its lowest component
  2769.    Seconds or Minutes if your not keeping track of seconds.  Then make your
  2770.    calculation and convert back.
  2771.  
  2772.    There are a number of scripts available in libraries 8 and 7 to do this.
  2773.  
  2774. #: 229270 S7/PAL - Learning ·
  2775.     23-May-93  22:26:25
  2776. Sb: #228857-Help & Fill
  2777. Fm: Mike Downey (CHC) 70404,2657
  2778. To: Fazur A. Estrada 72350,463
  2779.  
  2780. > changed our product codes ( aprox. 1900 new codes), I'd like to know if after
  2781. > an accept command, is there a way to access the Help and fill option available
  2782.  
  2783. There is no way to access the Help and Fill option in an accept command.
  2784. However, you could place the Lookup table on the workspace, move to it, and
  2785. do a Wait Table Until "F2", "Esc" to simulate a Lookup.
  2786.  
  2787. #: 229272 S7/PAL - Learning ·
  2788.     23-May-93  22:35:11
  2789. Sb: #229259-Setkey w/Edit and Report
  2790. Fm: Dickford Cohn 76226,1572
  2791. To: Mark E. Meyer 72260,2524 (X)
  2792.  
  2793. Mark, you're absolutely right...I just tried the sequence of events as you
  2794. outlined them, in version 4.00.  The SETKEYS certainly did not 'stick'. Should
  2795. be getting my 4.02 any day now...be interesting to see if this is fixed.
  2796.  
  2797. BTW, it doesn't work if you use SETKEY 47 MENU, either....or, for that matter,
  2798. PDOX4.00 doesn't seem to accept a SETKEY assignment of any kind in the
  2799. {Report}{Output} -or {Report}{RangeOutput} selections.  Thanks for bringing
  2800. this up...
  2801.  
  2802. Fm: Brian Bushay (TeamB) 76711,516
  2803.  
  2804.    I can't verify that <G>
  2805.    And I can't duplicate any of the behavior you get from setting "/" key to
  2806.    invoke the menu.
  2807.  
  2808.    Also I suspect entering dates will be a problem
  2809.  
  2810. Fm: Dickford Cohn 76226,1572
  2811.  
  2812.    Mark, just got my copy of the 4.02 release...sad to report that this
  2813.     behavior is *still* the same.  IOW, no matter what you do, key
  2814.    assignments via SETKEY do NOT work within {Report}{Output} or
  2815.    {Report}{RangeOutput}, nor do they work within the Editor...strange.
  2816.  
  2817.    Another strange thing...this is the first time I've ever received *eight*
  2818.    disks to upgrade *two* originals.  That said, however...(maybe it's my
  2819.    imagination<g>), 4.02 seems to impart a 'solid' feel.  In other words, it
  2820.    feels GOOD!  And the doggoned thing is *faster* than 4.00 (that's
  2821.     provable!).
  2822.  
  2823. Fm: Mark E. Meyer 72260,2524
  2824.  
  2825.    Dickford, oh well guess I'll have to issue setkey again for the editor and
  2826.    forget about using it in the report submenu.
  2827.  
  2828.    Thanks for the info on 4.02, am about to send in my 15.00 for the upgrade.
  2829.    Gosh.. by the time I buy all of my upgrades and addins ... I'll have to get
  2830.    another job just to support my software habbit!
  2831.  
  2832. Fm: Dickford Cohn 76226,1572
  2833.  
  2834.    Sure did, Don...they are 360k floppies, some of the files appear to be 'split'
  2835.    among several floppies and then re-constructed during the INSTALL process into
  2836.    one big ZIP file.  All the file dates are 4-27-93 with time at 4:02a.
  2837.  
  2838.    Upon reflection, this *would* be about right, since TUTILITY was not included
  2839.    in the original distribution of PDOX40 on two 1.2Mb disks.
  2840.  
  2841.    The other question is still puzzling, however...though it's no burning issue
  2842.    with me, do you have any ideas as to why SETKEY doesn't work while in
  2843.    {Report}{Output} or {Report}{RangeOutput} -and- the Editor?
  2844.  
  2845. Fm: Don Schubert (TeamB) 70007,4654
  2846.  
  2847.    Gosh, Dickford. Antique floppies (360k). Anyway, that explains why so many
  2848.    disks. Of course, I won't mention the fact that the "two disks" that prompted
  2849.    your question were HD <g>.
  2850.  
  2851.    SETKEY works for me in Report Range, etc. Do you have something specific you
  2852.    want me to check? Can't easily try editor because I have an external
  2853.    specified...
  2854.  
  2855. Fm: Dickford Cohn 76226,1572
  2856.  
  2857.    Yeh!  I thought they were 1.2Mb at first...until I checked<g>.  I did mention
  2858.    that I received 1.2Mb with 4.0, didn't I?  Thought I did anyway.
  2859.  
  2860.    As for SETKEY...as Mark Meyer pointed out, can't get it to work in
  2861.    {Report}{Output} or {Report}{RangeOutput}, nor does it work in the Editor at
  2862.    all.  Doesn't seem to make a difference as to *what* key you assign (i.e. pick
  2863.    one...any one<g>) *or* what routine you attach.  Come to think of it though,
  2864.    doesn't {Reoprt}{Otuput} shell out to DOS?  Maybe that explains it, I
  2865.    dunno...I do know that the same SETKEYS work in 3.5.
  2866.  
  2867.    Don't have much use for setkeys myself, so it's not really an issue...just
  2868.    curious, that's all.  I'm sure other folks do have use for this functionality,
  2869.    though.  Thanks.
  2870.  
  2871. Fm: Mark E. Meyer 72260,2524
  2872.  
  2873.    FWIW ... Setkey IS important to me ... and using the "/" key to access the
  2874.    menus is the most efficient way for me to work.  I don't use a mouse, not
  2875.    even when I at home.  I move around alot at work and not everyone has one.
  2876.    Nor does my editor recogize a mouse (Kedit).  For the same reasons I don't
  2877.    use a mouse with Windows & Excel 4.0a.
  2878.  
  2879.    >>Don't have much use for setkeys myself<<  I am curious though, how others
  2880.    use setkey ... F10 is toooo slow and hard to reach.
  2881.  
  2882. Fm: Dickford Cohn 76226,1572
  2883.  
  2884.    Mark, I didn't mean to imply that SETKEY wasn't important...it most assuredly
  2885.    is to folks who wish to use Paradox interactively.  In fact, assigning various
  2886.    routines/macros to certain keys can make interactive Paradox a whole lot
  2887.    easier to use...it can reduce significantly the number of keystrokes required
  2888.    for common operations and perform a lot of routine (even complex) functions at
  2889.    the mere press of a key.
  2890.  
  2891.    In my instance, my apps are controlled by scripts using WAIT...SETKEYS don't
  2892.    work in a WAIT.  I dunno myself why <F10> or MENU is so slow in 4.xx, though I
  2893.    don't have problems reaching it.  Your use of the slash key would seem to be a
  2894.    viable alternative for the 'reach problem' -and- would make your key layout
  2895.    similar to that of Lotus 1-2-3 (one of my favorite alltime programs).
  2896.  
  2897.    Here's hoping we can find out why SETKEY doesn't work in these specific
  2898.    circumstances...
  2899.  
  2900. Fm: Walt Payne 75020,2707
  2901.  
  2902.       But don't you use SETKEYS for accessing development tools.  Like I use
  2903.    ALT-F to just jump to PAL-Edit since it is also the key to load a file in
  2904.    PAL-Edit.  And one for PaintPAL and APForm, etc, etc.....  sure beats going
  2905.    through the menu to access them.
  2906.  
  2907. Fm: Dickford Cohn 76226,1572
  2908.  
  2909.    Nope Walt, I don't use SETKEYS for accessing anything in Paradox.  The reason
  2910.    is simple...I use a lot of key re-assignments in DOS...became rather fond of
  2911.    them.  Problem is when I go to someone else's system, they DON'T use these
  2912.    'hotkeys'.  I got so used to 'em that I almost had to re-learn DOS<g>. Same
  2913.    thing goes for Paradox...if my customers choose to use SETKEYS for their
  2914.    interactive use, I either have to use their setup, set up my own or use the
  2915.    menu option keys.  I'm so good at these keystrokes by now that it really
  2916.    doesn't bother me...got my swollen knuckles with Lotus 1-2-3.  It's kinda
  2917.    natural by now<g>.
  2918.  
  2919. Fm: Don Schubert (TeamB) 70007,4654
  2920.  
  2921.    Well, I can get a slash setkey to work everywhere but when you output is being
  2922.    sent to screen, printer or file.
  2923.  
  2924. Fm: John B. Moore (TeamB) 71333,1775
  2925.  
  2926.       >>F10 is too slow and hard to reach...
  2927.  
  2928.       Another good reason that IBM messed up the keyboard "standard" for enhance
  2929.    keyboards.  The function keys should be on the left where they belong. (which
  2930.    is why I use an OmniKey Ultra (Northgate)...)
  2931.  
  2932. Fm: Don Schubert (TeamB) 70007,4654
  2933.  
  2934.    Report Output and RangeOutPut both put you into a different mode and the only
  2935.    thing that works are standard pdox key functions. Try it in Screen and it's
  2936.    easier to see.
  2937.  
  2938.    I was able to try Setkey in Editor on a standard memo field and it works for
  2939.    me.
  2940.  
  2941. Fm: Dickford Cohn 76226,1572
  2942.  
  2943.    Hmmm, that's what I finally figured out...thanks.  How come this'd work in
  2944.    3.5?  Still can't get the SETKEY to work in the editor, though...I don't use
  2945.    it anyway, I prefer PR.  Again, just wondering...
  2946.  
  2947. Fm: Don Schubert (TeamB) 70007,4654
  2948.  
  2949.    Not sure, but I think this is the same as in 3.5. You could do everything up
  2950.    to the point that you hit enter in Output. Then only a Ctrl-Break would work.
  2951.    Feels like Pdox is under its own "script control" at that point. I am still
  2952.    able to use that "/" setkey Mark wanted in Editor.
  2953.  
  2954. Fm: Dickford Cohn 76226,1572
  2955.  
  2956.    Yeah Mark, Excel can be fun.  Wish it didn't have to run in Windoze<g>. BTW, I
  2957.    presume by your reference to "Felippe'" you're referring to the great
  2958.    Kahn...as in Philippe?<g>
  2959.  
  2960.    I'm just an old goat who still writes .BAT files in EDLIN and pumps a few
  2961.    little programs out in DEBUG...heck, one time a monitor went south on a
  2962.    client's rig.  What to do?  I didn't have LapLink available, so I booted the
  2963.    machine and copied the important files via DOS to floppy (after ZIPping them,
  2964.    of course)...all from commands typed in blind!  The client was flabbergasted
  2965.    (actually, so was I <g>)...probably couldn't do it again for all the tea in
  2966.    China.  Folks do find it hard to believe that the screen is NOT the only
  2967.    output device a PC has!<g>  Try THAT with a mouse.
  2968.  
  2969.    On my own rigs, I use a home-brewed interface in which I have almost 40 key
  2970.    assignments in DOS that perform all I need...and these reassignments don't
  2971.    interfere with apps.  It's a bear when I have to go to a 'naked' machine
  2972.    sometimes...<g>
  2973.  
  2974. #: 229281 S7/PAL - Learning ·
  2975.     23-May-93  23:36:17
  2976. Sb: #229260-Dialog box for download
  2977. Fm: Brian Bushay (TeamB) 76711,516
  2978. To: Mark E. Meyer 72260,2524 (X)
  2979.  
  2980. >Or should I send all of the files to be downloaded to my .bat file and shell
  2981. >out only once?
  2982.  
  2983. If you have more than two files to download your probably better of writing
  2984. the batch file to do the downloading.  This depends a lot on the speed of
  2985. shelling to DOS which will vary with the amount of Real and available memory
  2986. that you have.
  2987.  
  2988. #: 229325 S7/PAL - Learning ·
  2989.     24-May-93  08:54:36
  2990. Sb: PAL Calculations
  2991. Fm: Harold C. Schorr 72056,1640
  2992. To: sysop (X)
  2993.  
  2994. I have a variable assigned to the total of 12 fields which correspond to 12
  2995. months, each containing a percentage totaling 100%.  When the percentages are
  2996. not whole numbers, but the sum is 100,  the variable returns 100, but does not
  2997. satisfy "IF varname = 100" condition.  Is there a rounding problem that I'm
  2998. not aware of.  I have V.4.0.
  2999.  
  3000. Fm: Les Gainous 72731,146
  3001.  
  3002.    RE:  When the percentages are not whole numbers, but the sum is 100,  the
  3003.    variable returns 100, but does not satisfy "IF varname = 100" condition.
  3004.     Is there a rounding problem that I'm not aware of.
  3005.  
  3006.    Use:  IF ROUND(varName,0) = 100 THEN
  3007.            ...
  3008.            ...
  3009.          ENDIF
  3010.  
  3011. Fm: Brian Bushay (TeamB) 76711,516
  3012.  
  3013.    >Is there a rounding problem that I'm not aware of.
  3014.  
  3015.    Probably.  Numbers are stored internally in binary format.  Because
  3016.      decimal fractions can not always be exactly represented as binary
  3017.    numbers it is common for there to be small difference between numbers
  3018.    that are directly entered and numbers that are the sum of other numbers.
  3019.  
  3020.    This is analogous to adding the number 1/3 + 1/3 +1/3 to get 1
  3021.  
  3022.    If your storing 1/3 as the decimal fraction
  3023.     .3333333333333333333333333333333 You will not get an answer that is
  3024.    equal to 1
  3025.  
  3026.    Solution is to use the ROUND() operator when comparing numbers
  3027.  
  3028.    If Round(number1,2) = Round(number2,2) then
  3029.  
  3030.    because ROUND() is also subject to this binary perturbation it is safest
  3031.      to add a small number to each side of the Round()
  3032.  
  3033.  
  3034.    If Round(number1+.0001,2) = Round(number2+.0001,2) then
  3035.  
  3036. #: 229335 S7/PAL - Learning ·
  3037.     24-May-93  10:21:53
  3038. Sb: Editing MutliTable Forms
  3039. Fm: Mark Schoen 71332,3335
  3040. To: All
  3041.  
  3042.       Can anybody help me with how to automate the deletion of a record in a
  3043.  multi-table form? I can't figure out how to delete the detail record with
  3044.  the master record in a 2 table mutliple form.
  3045.        Also, right now I am working with the Application Workshop and I'm
  3046.  trying to figure out how to get the cursor to land on the detail form
  3047.  without having to hit the F3 or F4 keys while I'm editing or adding a new
  3048.  record.
  3049.  
  3050. Fm: Dave Schlieder ( SLI ) 72460,3561
  3051.  
  3052.    To automate the deletion of a master record in a MT form, try this.
  3053.  
  3054.    MoveTo "Detail"
  3055.    While NImageRecords() > 1 Del EndWhile
  3056.    Del
  3057.    MoveTo "Master"
  3058.    Del
  3059.  
  3060.    Of course this lacks all error checking, but this should get you going.
  3061.  
  3062.    Trying to get the cursor to automagically move to a detail can be quite
  3063.    involved, but you could trap a DEPARTFIELD trigger to the last field of the
  3064.    master, change the KEYCODE to the F3 or F4 codes and release the SCANCODE
  3065.    element.
  3066.  
  3067. #: 229382 S7/PAL - Learning ·
  3068.     24-May-93  13:22:53
  3069. Sb: Periodic Proc Calls?
  3070. Fm: Scott Dunham 71541,1276
  3071. To: All
  3072.  
  3073. I'm trying to write an application that puts a table view and a pulldown menu
  3074. on the screen in case the user wants to browse the table or do something else,
  3075. but the program must also use RUN to start an external EXE file every five
  3076. minutes or so without requiring input from the user.  I thought maybe using
  3077. GETEVENT IDLE would do it, but (ha, ha) it turns out that just because
  3078. nothing's happening isn't enough to constitute "idle" to Paradox 4.0.
  3079.  
  3080. Fm: David Chu (Sysop) 71333,121
  3081.  
  3082.    Getevent idle to msgarray
  3083.  
  3084.    will let you trap for idle events.  You can then calculate how much time has
  3085.    elapsed in order to run your external program.  You must make sure that your
  3086.    getevent is within a loop though.  Example:
  3087.  
  3088.    n = 0
  3089.    while true
  3090.       getevent idle to msgarray
  3091.       if msgarray["type"] = "IDLE"
  3092.          then n = n + 1
  3093.             message "Idle event#: ", n
  3094.             sleep 100
  3095.       endif
  3096.    endwhile
  3097.  
  3098. Fm: Scott Dunham 71541,1276
  3099. To: David Chu (Sysop) 71333,121
  3100.  
  3101.    I tried something like that, but on occasion the program has to enter a
  3102.    dialog box or menu, and Paradox doesn't seem to consider "waiting for
  3103.    input" to be the same as "idle", even if nobody's touched a key for a
  3104.    week.  I have yet to find a use for idle events, as the proc has to be
  3105.    doing literally nothing before they're picked up...
  3106.  
  3107.    Am I missing something?
  3108.  
  3109. #: 229553 S7/PAL - Learning ·
  3110.     24-May-93  23:55:32
  3111. Sb: pdj931 & PChooseD
  3112. Fm: Mark E. Meyer 72260,2524
  3113. To: all
  3114.  
  3115. I downloaded the PDJ931.arc file from Ziffnet because I'm looking for
  3116. examples on how to route the output from a report to a user defined
  3117. destination.  Among other files there are the PChooseD.sc and PChoose.sc
  3118. scripts.  I don't get PDJ and there are no readme.doc files included.
  3119.  
  3120. Can someone briefly describe how these two files work together.  PChoose.sc
  3121. calls a dlgbox.  But how does it work with PChooseD.sc ??
  3122.  
  3123. Fm: Steve Dickinson 75360,237
  3124.  
  3125.    PMFJI, but suggest you try PRINTT.zip in one of the libs for a generic
  3126.    PAL-based printout director.
  3127.  
  3128. Fm: Michael Radulescu 71561,3647
  3129.  
  3130.    First your immediate need..
  3131.  
  3132.    You have to declare the proc. in PchooseD script as dbox proc.  for
  3133.    SelectPrinter() In proc. SelectPrinter, right after the line "ShowDialog"
  3134.    place:
  3135.  
  3136.      Proc "SelectPrnDialog"
  3137.             Trigger "Arrive", "Update"
  3138.  
  3139.    These are the only two triggers they mention.. If you want to use these
  3140.    2 scripts as is you have to "play" script PChooseD from within procedure
  3141.    SelectPrinter (brrrr...) so add a line: Play "PChooseD" on a line, right
  3142.    after the line "Private....etc" You could write these proc. to a lib and
  3143.    call from there but for testing this method shoul work.
  3144.  
  3145.    Now: As Steve D. suggested try forum libraries as well. Also Paradox
  3146.    Informant (40 something/year) always has great code. Dan Paolini has a
  3147.    much, much elaborated method for printing reports. Not sure if you can
  3148.    access PI BBS without being a subscriber but here is the number: (just a
  3149.    moment gotta load comm programm..) 916-686-4740 no parity, data 8, stop
  3150.    1, full duplex, baud I guess up to 2400 (?) Dan's code is in PRINT1.ZIP
  3151.  
  3152. #: 229563 S7/PAL - Learning ·
  3153.     25-May-93  01:18:55
  3154. Sb: Lookup
  3155. Fm: Richard  A Sutton 71022,1455
  3156. To: ALL
  3157.  
  3158. Um...Is there a way for a field to tell me whether or not it has an attached
  3159. lookup without pressing any keys first? For example isvalid() will tell me if
  3160. a field is valid or blank or whatever. What I would like is something like
  3161. haslookup() so I can intercept the actual lookup table and use my own list box
  3162. type of thing.
  3163.  
  3164. case TriggerType = "ARRIVEFIELD" :
  3165.         if haslookup() then
  3166.                 DoHelpListBoxProc()
  3167.         endif
  3168.  
  3169. Fm: Harry Goldman (TeamB) 75300,1733
  3170.  
  3171.    You can do the following to determine if a field has lookup help:
  3172.  
  3173.    Echo OFF
  3174.    Help      ; Press HELP
  3175.              ; Is there help available ?
  3176.  
  3177.    Window Handle Image Imageno() To Handles.r["Help"]
  3178.  
  3179.    If Handles.r["Help"] = 0 Or Upper(HelpMode()) <> "LOOKUPHELP" Then
  3180.       Esc          ;
  3181.       Message "Lookup Help Is Not Available On This Field"
  3182.       Echo Normal
  3183.       Return False         ; If no Lookup Help is available quit out of
  3184.    Endif
  3185.  
  3186.    The above code assumes that there is a dynamic array for window handles
  3187.    called: HANDLES.R
  3188.  
  3189.    The above code will leave you in LookupHelp if there is any, otherwise it
  3190.    will return you to the calling routine.
  3191.  
  3192. Fm: Richard  A Sutton 71022,1455
  3193. To: Harry Goldman (TeamB) 75300,1733 (X)
  3194.  
  3195.    That does work, but I was hoping for an algorithm that did not require
  3196.    all the overhead of going in and out of LookupHelp, since I would like
  3197.    to use the function every time the user arrives at a new field. It
  3198.    seems that Paradox knows right away that a field has a lookup table
  3199.    attached (the speedbar does anyway.) I guess PAL cannot directly tap
  3200.    into this??  Currently I use a trick with the field name. If a field has
  3201.    a lookup table attached then the field name ends with _ID as in
  3202.    Action_ID or whatever...is this bad database design
  3203.  
  3204. Fm: Harry Goldman (TeamB) 75300,1733
  3205. To: Richard  A Sutton 71022,1455 (X)
  3206.  
  3207.    > Is this bad database design ??
  3208.  
  3209.    No not necessarily. Another option would be to set a variable or dynamic
  3210.    array element to show that the field has been assigned a lookup. The
  3211.    problem with all of these approaches, yours and the above is that it is
  3212.    too rigid, and too prone to problems. (You change a field from a lookup
  3213.    to no lookup, and don't change the name or variable....)
  3214.  
  3215.    I will typically not invoke the kind of logic that I sent you until the
  3216.    user presses [F1]. Then I will test for the existance of a lookup. I
  3217.    don't really care in my code until the moment the user presses [F1] if
  3218.    there is a lookup or not. The code itself is very fast, and Paradox
  3219.    activating a lookup is pretty fast too. Overall I would say that the
  3220.    time span between pressing [F1] and the 'No Lookup" message is < 1
  3221.    second on a 386/25.
  3222.  
  3223. Fm: Gary Bement 73507,1204
  3224. To: Harry Goldman (TeamB) 75300,1733 (X)
  3225.  
  3226.    A question about your posting here:
  3227.  
  3228.      You used: Upper(HelpMode()) <> "LOOKUPHELP"  AND
  3229.                Handles.r["Help"]
  3230.  
  3231.      to determine whether the cursor was in a lookup window.
  3232.  
  3233.    I assume you know of a condition where HelpMode() doesn't return a
  3234.    reliable value.  What condition is that?
  3235.  
  3236. Fm: Harry Goldman (TeamB) 75300,1733
  3237. To: Gary Bement 73507,1204
  3238.  
  3239.    I have found that there are times when the HELPMODE function is not
  3240.    reliable, but I have not been able to nail down when, and under what
  3241.    conditions. I do know that when you are in HELPMODE you will get a window
  3242.    handle of 0, (system) and by testing both you will alsways be safe.
  3243.  
  3244.    BE CAREFULL, HELP will send you into the twilight zone if you aren't
  3245.    carefull.
  3246.  
  3247. Fm: Mike Downey (CHC) 70404,2657
  3248. To: Harry Goldman (TeamB) 75300,1733
  3249.  
  3250.    > I have found that there are times when the HELPMODE function is not
  3251.    > reliable, but I have not been able to nail down when, and under what
  3252.  
  3253.    The only anomolity I have found is that if another user has the current
  3254.    record locked, HelpMode() will be "None" whether there is lookup help or
  3255.    not.
  3256.  
  3257.    Maybe you could pass on a request to your friends at Borland for a
  3258.    HasLookup( Table, FieldName ) function?
  3259.  
  3260. #: 229638 S7/PAL - Learning ·
  3261.     25-May-93  12:21:18
  3262. Sb: Passing arrays to Procs
  3263. Fm: William J. Boyd 71621,2360
  3264. To: All
  3265.  
  3266.         I am using Paradox 3.0.  In the PAL users guide on p.296 under the
  3267. command reference for EXECPROC there is the following code:
  3268.  
  3269. 1       procarray = procarray1  ; specify array containing names of procs
  3270. 2                                               ; to be called
  3271. 3       FOR i FROM 1 to ARRAYSIZE(procarray)
  3272. 4               EXECPROC procarray[i]
  3273. 5       ENDFOR
  3274.  
  3275.         Is this an error?  Why wouldn't line 4 return a script error because
  3276. procarray has not been dimensioned as an array.  If procarry1 is dimensioned,
  3277. then line 1 will return a script error stating that the [] is missing.  If
  3278. procarray is dimensioned, line 1 will return a similar error with regard to
  3279. missing []s for procarray.
  3280.  
  3281. Fm: Harry Goldman (TeamB) 75300,1733
  3282.  
  3283.    The snipet you copied assumes that Procarray[] has been dimensioned as an
  3284.    array, that the array is filled with values and that the values equate to
  3285.    VALID procedure names.
  3286.  
  3287. #: 229649 S7/PAL - Learning ·
  3288.     25-May-93  13:05:36
  3289. Sb: CISMSG.ZIP
  3290. Fm: Mark T. Houpt 70142,2720
  3291. To: all all
  3292.  
  3293. To those who have downloaded CISMSG.ZIP to date!
  3294.  
  3295. We found a rather glaring error of ommision in our first upload which will
  3296. cause certain error in the program.  A new version will be posted soon to
  3297. correct the error.  Drop me a Email with name and address and I will mail
  3298. you a corrected version so that you can avoid additional download time.
  3299.  
  3300. #: 229652 S7/PAL - Learning ·
  3301.     25-May-93  13:08:44
  3302. Sb: #228774-Locate problem
  3303. Fm: Dev Vamathevan (Sysop) 71333,2241
  3304. To: Yiu Shih Lee 72360,1005
  3305.  
  3306. I have another question about LOCATE.  Can we LOCATE a 'Calculated Field'?
  3307. i.e. [first name]+" "+[last name] ?
  3308.  
  3309. You can use a calculated expression in your locate.
  3310. e.g.
  3311.   locate [first] + " " + [Last]
  3312.  
  3313. this will work on a regular field, but not on a calculated field.
  3314.  
  3315. #: 229653 S7/PAL - Learning ·
  3316.     25-May-93  13:08:48
  3317. Sb: #229055-Membership
  3318. Fm: Dev Vamathevan (Sysop) 71333,2241
  3319. To: Rick Andres 70702,2706 (X)
  3320.  
  3321. I am trying with great difficulty to understand DataBased Applications.  I am
  3322. an intermediate Paradox user who has jumped withapplications.
  3323.  
  3324. There are three documents that may interest you:
  3325.  
  3326. document # 127,124,783
  3327.  
  3328. you can request for them by calling 800 822-4269
  3329.  
  3330. #: 229677 S7/PAL - Learning ·
  3331.     25-May-93  15:51:26
  3332. Sb: LAST MODIFIED!!! HELP!!!
  3333. Fm: David Chiaramonte 71052,1616
  3334. To: SYSOP (X)
  3335.  
  3336. I need a real quick and dirty solution for this scenario:
  3337.  
  3338. Database structure is
  3339.  
  3340. Part #              A20
  3341. Description         A20
  3342. Price                $
  3343. Last Update date        D
  3344.  
  3345. Everytime one of our techs edits a record, we need the LAST UPDATE DATE field
  3346. to automatically change to the current date automatically.
  3347.  
  3348. Is there a real simple script that can initiate this?
  3349.  
  3350. Fm: Steve Erbach (NEWPALS) 70620,3432
  3351.  
  3352.    Not really.  Check with some of the PAL gurus here, but you might try
  3353.    something like this:
  3354.  
  3355.    PROC EditParts.u()
  3356.      .
  3357.      .
  3358.      .
  3359.      COEDIT "Parts"
  3360.      ECHO NORMAL
  3361.      WAIT TABLE
  3362.        PROC "MyWaitProc.n"
  3363.        TRIGGER "DEPARTROW"
  3364.        KEY "F2", ...
  3365.      ENDWAIT
  3366.      ECHO OFF
  3367.      CLEARALL ENDPROC
  3368.  
  3369.    PROC MyWaitProc.n(Triggertype.a, EventRecord.y, Cycle.n)
  3370.      SWITCH
  3371.        CASE Triggertype.a = "DEPARTROW":
  3372.          IF RECORDSTATUS("Modified") THEN
  3373.            [Last Update date] = TODAY()
  3374.          ENDIF
  3375.          RETURN 0
  3376.        CASE Triggertype.a = "EVENT":
  3377.          SWITCH
  3378.            CASE EventRecord.y["TYPE"] = "KEY":
  3379.              SWITCH
  3380.                CASE EventRecord.y["KEYCODE"] = ASC("F2"):
  3381.                  DO_IT!
  3382.                  RETURN 1
  3383.              ENDSWITCH
  3384.          ENDSWITCH
  3385.      ENDSWITCH ENDPROC
  3386.  
  3387. Fm: Dev Vamathevan (Sysop) 71333,2241
  3388.  
  3389.    Steve has the right solution to your problem, but I would like to
  3390.     suggest one little change that may impove the performance of your
  3391.     application.
  3392.  
  3393.    instead of trapping for the "DEPARTROW" try trapping for the
  3394.    "POSTRECORD", this way the wait proc is called only when a change is
  3395.    made.
  3396.  
  3397. Fm: David Berg (Borland) 73020,374
  3398.  
  3399.    Steve's message is the right direction, but you may want to check out the
  3400.    TOUCHRECORD or POSTRECORD triggers, that would skip the need to check the
  3401.    MODIFIED status flag.
  3402.  
  3403. #: 229682 S7/PAL - Learning ·
  3404.     25-May-93  16:40:53
  3405. Sb: Case Sensitivity
  3406. Fm: Bill Curnutte 76164,1674
  3407. To: All
  3408.  
  3409.   Some confusion regarding case insensitiviy:
  3410.  
  3411.   The documentation states that Paradox is mostly case insensitive.  I do
  3412. understand that, for example
  3413.  
  3414.   wait record
  3415.      until "f2", "esc", "dos", "dosbig"
  3416.  
  3417.   switch
  3418.      case "F2":
  3419.         ...
  3420.      case "Esc":
  3421.  
  3422. and so on, won't work because retval gets assigned the exact quoted string in
  3423. the key list.
  3424.  
  3425. I also discovered, the hard way, that this won't work either:
  3426.  
  3427.   getevent to EventArray
  3428.      if EventArray["type"] = "key" and EventArray["keycode"] = 27   ;Esc
  3429.         then winclose
  3430.  
  3431. But this does work:
  3432.  
  3433.   getevent to EventArray
  3434.      if EventArray["TYPE"] = "KEY" and EventArray["KEYCODE"] = 27
  3435.  
  3436. The upshot of all this is: is there anywhere in the documentation that makes
  3437. clear just what is case sensitive and when (other than string constants)?
  3438.  
  3439. As a C programmer, the (relatively) free form syntax drives me crazy.  One
  3440. solution would be to put EVERYTHING in caps, but, yuck!, that looks like old
  3441. Basic.  Putting all the keywords in caps would wear out my Shift and Caps Lock
  3442. keys in a hurry.
  3443.  
  3444. Fm: Brian Bushay (TeamB) 76711,516
  3445.  
  3446.     if EventArray["typE"] = "KEY" and EventArray["keycode"] = 27
  3447.  
  3448.    the above works too.  dynarray indexes are case insensitive.  Paradox is
  3449.    constant.  When Paradox returns a String value and your going to make a
  3450.    comparison to that string then you need to be sure of the case your using
  3451.  
  3452.    so with
  3453.  
  3454.    >  wait record
  3455.    >     until "f2", "esc", "dos", "dosbig"
  3456.  
  3457.    Paradox is returning these values to PAL via retval.  The values are
  3458.    returned as you enter them
  3459.  
  3460.  
  3461.    >  getevent to EventArray
  3462.    >     if EventArray["TYPE"] = "KEY" and EventArray["KEYCODE"] = 27
  3463.  
  3464.    In this case Paradox is passing the value "KEY" and 27 in the Dynarray
  3465.    elements.
  3466.  
  3467. Fm: Bill Curnutte 76164,1674
  3468.  
  3469.      Got it!  I hadn't tested all the combinations and permutations of the
  3470.    capitalization of the three keywords, so I didn't know if it was one of
  3471.     them or all of them or some combination.
  3472.  
  3473.      The lessons you learn this way are the ones that stick with you.  You
  3474.       know, like accidentally reformatting your hard disk.  I did that
  3475.    once, too, about ten years ago, and have never done it again.
  3476.  
  3477. #: 229711 S7/PAL - Learning ·
  3478.     25-May-93  18:44:59
  3479. Sb: Edit Procs/Scripts
  3480. Fm: Shirley J Cook 72520,664
  3481. To: All
  3482.  
  3483. I'm new to PROC's and scripts to create them.   I would like to verify my
  3484. understanding of this process:
  3485.  
  3486. 1) A PROC starts out as a script either from 1) RecordScript, 2) Typed in the
  3487. Editor, or 3) a combination of the two.
  3488.  
  3489. 2)  The only way to "convert" a script to a PROC is to edit the script and add
  3490. the PROC....EndPROC and WriteLib instructions.  Then, only the commands
  3491. between the PROC and EndProc are actually placed in the Lilbrary.
  3492.  
  3493. 3)  If I have to go back and edit the Proc, I then edit the script.  1) I
  3494. remove the Proc...EndProc and WriteLib  commands. 2) Make changes and test the
  3495. script.  3) Place it back in the library by inserting the PROC...EndProc and
  3496. WriteLib commands.
  3497.  
  3498. 4)  After I place a script in the Proc Library, if I want to use the script as
  3499. as script, I need to remove the PROC...EndProc and WriteLib commands.  Then,
  3500. the PROC is available or I can run a script.  Alternatively, would it be
  3501. better just to run the actual PROC from Alt-F10 (the PAL Menu) and not get
  3502. involved with removing those lines from the script?
  3503.  
  3504. 5)  PROC cannot be deleted from a LIbrary.  Why not?  Makes sense to me!
  3505.  
  3506. Fm: Steve Erbach (NEWPALS) 70620,3432
  3507.  
  3508.    Regarding PROCs...your first two points are correct.  In point 2, however, you
  3509.    may want to consider putting multiple PROCs into one script.
  3510.  
  3511.    Most PAL developers use a set of scripts to create an application:
  3512.  
  3513.    1)  The main script or scripts that contain all of the procedures.  Each
  3514.    PROC ENDPROC is followed by lines like the following:
  3515.  
  3516.       WRITELIB libname.a ProcedureName
  3517.       RELEASE PROCS      ProcedureName
  3518.  
  3519.    2)  The library building script which creates the procedure library from
  3520.    your main scripts.  It looks something like this:
  3521.  
  3522.       ; MAKE.SC
  3523.       libname.a = "Yourlib"
  3524.       CREATELIB libname.a
  3525.       PLAY "Main1"
  3526.       PLAY "Main2"
  3527.       PLAY "Main3"
  3528.       INFOLIB libname.a
  3529.  
  3530.    3)  The "run" script which tells Paradox where all of the procedures are
  3531.    to be found and then executes the main procedure:
  3532.  
  3533.       CLEARALL
  3534.       RESET
  3535.       AUTOLIB = "Yourlib"
  3536.       Main.u()
  3537.  
  3538.    Optionally, you may place the last 4 lines at the end of the library building
  3539.    script so that your script executes immediately after the library is rebuilt.
  3540.  
  3541. Fm: Shirley J Cook 72520,664
  3542.  
  3543.    I finally had a chance to review all the answers to my quetions from earlier
  3544.    in the week.  let's see if I understand your suggestions:
  3545.  
  3546.    1) For an application, I create and test all the scripts.
  3547.  
  3548.    2) I then create a "master" script that lists all the scripts with
  3549.    Proc...EndProc, WirteLib and Release Proc for each script.  If I have a
  3550.    zillion scripts, I might want to group them into multiple "master" scripts.
  3551.  
  3552.    3)  I create another script whose purpose is to build the library from all the
  3553.    scripts in all the masters where, in your example, Main1 = Master1, Main2 =
  3554.    Master2, etc.
  3555.  
  3556.    4)  Can't I just set the autolib in the definition of the application?
  3557.  
  3558.    If that's OK <G!>...
  3559.  
  3560.    What do I do if I have to edit 1 proc/script?  What are the best steps to
  3561.    take?  And, I'm still confused about scripts not running after they are
  3562.    "coded" to make them into procs.  What's the best way to use a script in table
  3563.    view as well as to simultaneously use it as a proc from the autolib?  Should I
  3564.    not run them as scripts and just load the library and run them as rpocedures?
  3565.  
  3566.    And, why can't I delete a proc from a library?
  3567.  
  3568. Fm: Steve Erbach (NEWPALS) 70620,3432
  3569.  
  3570.    By golly, I don't think I've ever responded to a message with 6 questions in
  3571.    it besides being asked to confirm or deny another half dozen assertions! Well,
  3572.    lets tackle this, shall we?
  3573.  
  3574.    You're fine up through point #3.  However...
  3575.  
  3576.    >> 4)  Can't I just set the autolib in the definition of the application? <<
  3577.  
  3578.    We have to get some terms straight here.  Once you've created the procedure
  3579.    library that contains all the modules for your application, you must initiate
  3580.    the application by assigning your library name (or names) to the AUTOLIB
  3581.    system variable; thusly:
  3582.  
  3583.    ; You've created 3 libraries:  one contains all of your Wait handling
  3584.    ; procedures, the second one contains your menus, queries, and printing
  3585.    ; routines, and the third contains your utilities for displaying messages,
  3586.    ; handling errors, etc.  You now want to run the application.
  3587.  
  3588.    AUTOLIB = "Waitlib,Menulib,Utillib"
  3589.    ERRORPROC = "Errorhandler.u"
  3590.    READLIB "Utillib" Errorhandler.u  ; Make sure this error handling routine
  3591.                                        ; is always in memory
  3592.    MainMenu.u()  ; Here's the "launching" procedure for your application
  3593.  
  3594.    Sorry if I repeated myself there, Shirley, but your question about setting the
  3595.    AUTOLIB in the "definition of the application" threw me a bit.  You set the
  3596.    AUTOLIB variable when you're ready to run your application; that is, after the
  3597.    libraries have been created.
  3598.  
  3599.    >> What do I do if I have to edit 1 proc/script?  What are the best steps to
  3600.    take? <<
  3601.  
  3602.    If there's a bug in a procedure, the PAL debugger will allow you to jump
  3603.    directly into the script that contains it.  You squash the bug, then re-run
  3604.    your library building script, then run the script that sets the AUTOLIB. The
  3605.    best steps to take are really the only steps to take; that is, rather than
  3606.    write one script for every procedure, place several procedures into one
  3607.    script.  That makes editing them a bit easier since one procedure calls
  3608.    another and if there's a bug in one, there might be a similar bug in another.
  3609.    So better to have a bunch of procedures in one script.
  3610.  
  3611.    >> And, I'm still confused about scripts not running after they are "coded" to
  3612.    make them into procs. <<
  3613.  
  3614.    I'm not quite sure what you mean here.  Again, if you "proceduralize" your
  3615.    scripts, the most effective way to handle them from there on is to write them
  3616.    into a library.  If a procedure has a bug and you have to edit the script that
  3617.    contains it, you re-run the library building script to write all of the
  3618.    procedures in that script back into the library, in essence creating the
  3619.    library from scratch each time.  This doesn't take as long as you think.
  3620.  
  3621.    Some folks, like Alan Zenreich in his WaitPlus Pro 4, will create several
  3622.    scripts with many procedures each, but all of them will be written to one
  3623.    library.  Therefore if you have a bug in just one procedure, you either have
  3624.    to write all of the procedures in that script into the existing library (which
  3625.    adds to the size of the lib; the old versions of the procs are marked as
  3626.    obsolete and the fresh ones are tacked onto the end); or you create the whole
  3627.    library from scratch and write _all_ of the procedures from _all_ of the
  3628.    scripts into it.
  3629.  
  3630.    >>  What's the best way to use a script in table view as well as to
  3631.    simultaneously use it as a proc from the autolib? <<
  3632.  
  3633.    Does this mean that you want to be able to use one procedure kind of in an ad
  3634.    hoc manner?  For instance, say you've got a proc that plays a couple of
  3635.    queries, copys a report to an answer table and prints.  You could do this with
  3636.    a SETKEY:
  3637.  
  3638.    SETKEY "F20" READLIB "YourLib" QueryPrint.u QueryPrint.u()
  3639.  
  3640.    F20 is Shift-F10.  This setkey reads the proc from the library and executes
  3641.    it.
  3642.  
  3643.    >> And, why can't I delete a proc from a library? <<
  3644.  
  3645.    Beats me, ma'am.  You'll have to ask Borland on this one.
  3646.  
  3647. Fm: Steve Caple (TeamB) 76711,520
  3648.  
  3649.    Shirley, let stick my 2 cents in in addition to Steve's explanation.
  3650.  
  3651.    On editing just one procedure:  If re-"compiling" your procedure libraries
  3652.    takes too much time, here's a trick I learned from Stephen Ross.
  3653.  
  3654.       In your application driver script, add a lib to the _beginning_ of your
  3655.       autolib path, named TEMP or TEST or such.  Follow each of your proc
  3656.       definitions with < writelib LibName ThisProc > (or whatever proc name) and
  3657.       < release procs ThisProc >.  Libname is defined at the beginning of the
  3658.       Makelib.sc that makes the library and plays all the scripts that define
  3659.       procs to write to it.
  3660.  
  3661.       When a proc needs some modification, or for developing a new proc or group
  3662.       of procs, copy the code to the Temp.sc.  This script has the library
  3663.       create at the beginning, and writes to the TEMP.LIB.  When you have the
  3664.       proc(s) written or edited, play just this script and then play your app
  3665.       driver script.  Even if the proc is an existing one being modified or
  3666.       troubleshot, and that is in the old .LIB files, Paradox will find the new
  3667.       version in TEMP.LIB because TEMP is first in the autolib path.
  3668.  
  3669.       Once everything is working great, move the code back to the appropriate
  3670.       script.  Leave the  < createlib "Temp" > at the beginning of Temp.sc.  The
  3671.       < writelib LibName .. > will work where ever it's put down if LibName is
  3672.       defined.  Kallista's PAL-Edit defaults to placing the writelib and
  3673.       release lines in this style after your proc definitions.
  3674.  
  3675.    This will allow rapid development and modifications cycles, since only the
  3676.    small TEMP script has to play.
  3677.  
  3678.    As for scripts converted to procs not working, if you just add proc and
  3679.    endproc lines and play the script, nothing will happen.  Add a procedure
  3680.    call to the end of the script and the proc, still in memory, will execute:
  3681.  
  3682.       proc Whatsis()
  3683.       ... etc.
  3684.       endproc
  3685.       Whatsis()
  3686.  
  3687. #: 231581 S7/PAL - Learning ·
  3688.     05-Jun-93  18:16:08
  3689. Sb: MODEM control from PAL ?
  3690. Fm: David Batten (UK) 100042,221
  3691. To: ALL
  3692.  
  3693. I have developed a PDOX40/PAL application around my contact database to
  3694. organise my routine phone calls. The displayed data form includes the full
  3695. numeric telephone number.
  3696.  
  3697. Q.  Is there any way that PAL can pick up the phone number field, add the
  3698. 'Hayes-compatible' command codes for my modem, and interact with my modem
  3699. serial port to achieve an automatic dial-out?
  3700.  
  3701.    Ideally I would like a procedure which could sense the outcome of the call
  3702. attempt (BUSY, NO-ANSWER, COMPLETED etc) and also measure the duration of a
  3703. completed call.
  3704.  
  3705.    My first problem is knowing how to drive the modem port from Paradox.....
  3706.  
  3707.  
  3708. Surely someone, somewhere has done this before?    Can you help?
  3709.  
  3710. Fm: Brian Bushay (TeamB) 76711,516
  3711. To: David Batten (UK) 100042,221
  3712.  
  3713.    >Q.  Is there any way that PAL can pick up the phone number field, add
  3714.    the >'Hayes-compatible' command codes for my modem, and interact with
  3715.    my modem >serial port to achieve an automatic dial-out?  Yes look in the
  3716.    libraries you will find several scripts to do that.  Dial.sc comes to
  3717.    mind as one of them
  3718.  
  3719.    >   Ideally I would like a procedure which could sense the outcome of
  3720.     the call >attempt (BUSY, NO-ANSWER, COMPLETED etc) and also measure the
  3721.    duration of a >completed call.
  3722.  
  3723.    You won't get that because it would require reading a serial port
  3724.  
  3725. Fm: David Batten (UK) 100042,221
  3726. To: Brian Bushay (TeamB) 76711,516
  3727.  
  3728.    Thanks Brian for the superfast response. I shall certainly look for DIAL.SC
  3729.    and whatever else seems relevant to automating the dial out.
  3730.  
  3731.    Concerning a feedback of the outcome and duration, I was hoping maybe PDox
  3732.    _could_ read the serial port, but no such feature appears from my search of
  3733.    the manuals.
  3734.  
  3735.    I wondered if a TSR exists which would pick up the phone number, dial it and
  3736.    feed something back? I know some 'stand-alone' TSRs maintain address books and
  3737.    control dialling out. I suspect they also monitor the success of the dialling
  3738.    process too.
  3739.  
  3740.    Maybe someone 'out there' has found a way.....
  3741.  
  3742.    Once again, many thanks for the suggestion and info.     David
  3743.  
  3744. Fm: David Batten (UK) 100042,221
  3745. To: Graham L. Stoppani 100111,265
  3746.  
  3747.    Thanks for the thought, Graham, but I already use an addressbook/diary package
  3748.    (PORTEX) which I am very happy with. I use it for personal and business
  3749.    addresses/phone numbers, or any number I have had to do work to find, and may
  3750.    just need again 'one day'.
  3751.  
  3752.    My Paradox database is a much larger list of companies, contacts, and what
  3753.    communications there have been previously. Often the data is imported from
  3754.    commercially supplied lists etc, so I need a generic 'discipline' to keep
  3755.    control of who is due for a phone call (Cold-calling, most of it).
  3756.  
  3757.    Maybe Sidekick could do a lot of this, but it is 'yet another tool' to learn,
  3758.    convert data to, and try to 'bend to my will'.
  3759.  
  3760. #: 231624 S7/PAL - Learning ·
  3761.     06-Jun-93  09:04:14
  3762. Sb: IsField(tbl,fld)???
  3763. Fm: John M. Patton 72500,2131
  3764. To: ALL
  3765.  
  3766. >Why doesn't PAL have an IsField(tbl,fld) function to
  3767. >test for the existance of a specific field in a table,
  3768. reminded me of a work-around with which I've never been happy.
  3769.  
  3770. In order to present the user with an "average sold" for each delivery day of
  3771. a possible Monday, Wednesday or Friday, I've crosstabed a range of dates
  3772. from a large historical table.  The crosstab is on DOW(InvoiceDate).  The
  3773. trouble is that sometimes an invoice gets written on a Tuesday or Thursday
  3774. and I need to add it into the Monday or Wednesday sum for the product in
  3775. question.  I need to test for a field of "Tue" or "Thu" in the crosstab to
  3776. add it to "Mon" or "Wed."
  3777.  
  3778. The method I'm using now is:
  3779.  
  3780. IF FIELDNO(fld, tbl) <> "error" THEN
  3781.    Process_Field()
  3782. ENDIF
  3783.  
  3784. It seems to work, yet I'm the worrying type.  This doesn't seem elegant.
  3785.  
  3786. Historical table:         Crosstab table:
  3787.  Account#      S*          Account#    S
  3788.  Product#      S*          Product#    S
  3789.  InvoiceDate   D*          Mon         A3
  3790.  QuantitySold  N           Wed         A3
  3791.  DayOfWeek     A3          Fri         A3
  3792.                           (Tue         A3) maybe
  3793.                           (Thu         A3) maybe
  3794.  
  3795. Fm: Brian Bushay (TeamB) 76711,516
  3796. To: John M. Patton 72500,2131 (X)
  3797.  
  3798.    >The method I'm using now is:
  3799.    >IF FIELDNO(fld, tbl) <> "error" THEN
  3800.    >   Process_Field()
  3801.    >ENDIF
  3802.  
  3803.    >Is there a better mousetrap?
  3804.    FieldNo() is a slow command so I wouldn't use this approach in a loop but
  3805.    for a single command it is fine.  If your going to be doing a lot of
  3806.       field testing then reading the field names into a dynarrray either by
  3807.  
  3808.    Dynarray fields.y[#]
  3809.    CtrlHome Right
  3810.    While Field() <> "#"
  3811.      fields.y[Field()] = 1
  3812.    EndWhile
  3813.  
  3814.    or by doing a {Tools}{Info}{Structure} and then a SCAN
  3815.    would be a better way to go
  3816.  
  3817. Fm: John M. Patton 72500,2131
  3818. To: Brian Bushay (TeamB) 76711,516
  3819.  
  3820.    This is what I'm doing:
  3821.       MENU {Ask} {Crosstab}
  3822.       IF FIELDNO("Tue","Crosstab") <> "Error" THEN
  3823.          [Mon] = "_mo, changeto _mo + _tu"
  3824.          [Tue] = "_tu"
  3825.       ENDIF
  3826.       IF FIELDNO("Thu","Crosstab") <> "Error" THEN
  3827.          [Wed] = "_we, changeto _we + _th"
  3828.          [Thu] = "_th"
  3829.       ENDIF
  3830.  
  3831. #: 229298 S8/PAL - USING ·
  3832.     24-May-93  01:46:23
  3833. Sb: #229203-PRINT command questions.
  3834. Fm: Thomas P Knox 70410,764
  3835. To: Les Gainous 72731,146 (X)
  3836.  
  3837. Just to second and underscore what Brian said, it is much better to print to
  3838. a file and send the file to the printer.  Some reasons why:
  3839.  
  3840.        - better error handling.
  3841.        - fewer problems printing over a network
  3842.        - don't need to use OPEN / CLOSE PRINTER
  3843.        - can preview report on screen first.
  3844.        - can reimport the text file back into a Paradox table for
  3845.          secondary processing (i.e. in page numbering to get "Page 1 of n")
  3846.        - if printer jams, you can just resend the text file and not have
  3847.          to re-generate the report.
  3848.  
  3849. Also FWIW, when using PRINT commands, use commas to separate items in the
  3850. data stream, this way Paradox will automatically convert non-alpha fields to
  3851. strings so you don't have to worry about using strval(), and you don't have
  3852. problems with string lengths > 255 when you use a plus instead of the comma.
  3853.  
  3854. Also, one PRINT command will continue to send a stream of data until it is
  3855. interrupted by a PAL command or control structure.  You don't need a PRINT
  3856. command for every line in your script.  Example:
  3857.  
  3858.     print file fname
  3859.     format("w10,ac","Date"),
  3860.     format("w20,ac","Amount"), "\n",
  3861.     fill("=",40), "\n\n"
  3862.  
  3863.     scan
  3864.         print file fname
  3865.         format("w10",[DateField]),
  3866.         format("w20.2,e$c,ar",[AmountField]), "\n"
  3867.     endscan
  3868.  
  3869.     print file fname
  3870.     "\n\nEnd of Report\f"
  3871.  
  3872.     bozo = isfile(fname)         ; force file closed
  3873.  
  3874. At this point, you can use readme.com to view the file or copy to PRN for a
  3875. hard copy.
  3876.  
  3877. Fm: Les Gainous 72731,146
  3878.  
  3879.    Thanks for the PRINT command hints and tips.  I sent a msg to the forum right
  3880.    before reading your msg.  That msg explains the trouble I'm having printing
  3881.    printer codes to the printer.  I'm using PRINT FILE.  The filename is "prn",
  3882.    to print to the printer, or some other name, to print to an 'actual' file.
  3883.  
  3884.    If I print the control codes directly, it works.  If I put these codes in a
  3885.    variable and print that variable, it doesn't work.  It prints, verbatim, the
  3886.    codes.
  3887.  
  3888. Fm: Thomas P Knox 70410,764
  3889.  
  3890.    <<If I print the control codes directly, it works.  If I put these codes in a
  3891.    variable and print that variable, it doesn't work.  It prints, verbatim, the
  3892.    codes.>>
  3893.  
  3894.    In putting codes in a variable you'll need to remember to double up the
  3895.    "\" as you'll lose one set of 'em when you dump the variable to its output.
  3896.  
  3897. Fm: David Berg (Borland) 73020,374
  3898.  
  3899.    You can say PRINT FILE "LPT1", and you can put the "LPT1" in a variable.
  3900.  
  3901. Fm: Thomas P Knox 70410,764
  3902. To: David Berg (Borland) 73020,374 (X)
  3903.  
  3904.    <<You can say PRINT FILE "LPT1", and you can put the "LPT1" in a variable.>>
  3905.  
  3906.    Yes, but why?  If you are printing to a file, use a file name.  The above is
  3907.    just another form of PRINT going direct to the printer.
  3908.  
  3909.    I have not yet heard one good reason, over the years, why anyone would want
  3910.    to print directly to the printer, instead of to a file and then send the
  3911.    file to the printer.
  3912.  
  3913. Fm: David Berg (Borland) 73020,374
  3914. To: Thomas P Knox 70410,764 (X)
  3915.  
  3916.    > I have not yet heard one good reason, over the years, why anyone would want
  3917.    > to print directly to the printer, instead of to a file and then send the
  3918.    > file to the printer.
  3919.  
  3920.    The main reason is if the printout takes a long time to produce and the
  3921.    printer is locally attached.  In that case you can save considerable time by
  3922.    not waiting for the report to print twice...  It can also be critically
  3923.    important when trying to deal with printer alignment issues.
  3924.  
  3925.    Other than that, I'd probably agree.
  3926.  
  3927. Fm: Thomas P Knox 70410,764
  3928. To: David Berg (Borland) 73020,374 (X)
  3929.  
  3930.    Just to quibble:
  3931.  
  3932.    <<The main reason is if the printout takes a long time to produce and the
  3933.    printer is locally attached.  In that case you can save considerable time by
  3934.    not waiting for the report to print twice...>>
  3935.  
  3936.    Well, you still have the problem of what to do if the printer jams, runs out
  3937.    of paper, etc.  You can't just restart the PRINT command at line 165. You may
  3938.    may well have to "debug" the code to skip a lengthy query and/or workspace
  3939.    configure for the report, to just restart it from the point where the app
  3940.    starts sending output to the printer.
  3941.  
  3942.    You really don't have to wait for it to print twice; printing to a file will
  3943.    take a LOT LESS time than the printer will.  So maybe it's 1.25 and not
  3944.    twice as long (1 for the printer and .25 to create the file)
  3945.  
  3946.    If lengthy printing times are an issue, printing to a file makes even more
  3947.    sense.  You can have a "printing" workstation check for the existence of a
  3948.    file and when it's there, start grinding it out to the printer.  This can be
  3949.    a PC that may not be able to run the app that creates the report.  Thereby
  3950.    maximizing your resources.
  3951.  
  3952.    <<  It can also be critically important when trying to deal with printer
  3953.    alignment issues.>>
  3954.  
  3955.    When alignment issures are important, you typically, have a alignment "loop"
  3956.    procedure that sends a few records to the printer until the alignment is OK.
  3957.    This procedure would test all the "key" spots on the form for correct
  3958.    alignment; something the actual report may not do until several hundred
  3959.    records into it.  You wouldn't use the full report to do the
  3960.    alignment whether using PRINT to printer OR file.
  3961.  
  3962. Fm: David Berg (Borland) 73020,374
  3963. To: Thomas P Knox 70410,764 (X)
  3964.  
  3965.    Your points are all valid, but (since you're quibbling) not always
  3966.    appropriate.
  3967.  
  3968.    Printing speed will vary, and sometimes it takes longer to produce a report
  3969.    than to print it... not everyone has 486s.  Also for some people it's more
  3970.    important to see the first record quickly than to have good restart
  3971.    capability.
  3972.  
  3973.    You can restart your PRINT commands at line 165 if you designed your code to
  3974.    support it (although it's probably easier to do using a file).
  3975.  
  3976.    Not everyone can afford a separate computer for printing (which also implies a
  3977.    network...).
  3978.  
  3979.    I'm simply saying that you need to look at the specific situation and make the
  3980.    right decisions.
  3981.  
  3982. Fm: Thomas P Knox 70410,764
  3983. To: Les Gainous 72731,146 (X)
  3984.  
  3985.    I think my last message gave you some erroneous information.  You had mentioned
  3986.    that sending a printer command with PRINT worked but if the command was in a
  3987.    variable then "PRINT variable" failed.  I said you needed to double the \'s in
  3988.    the variable.
  3989.  
  3990.    In looking back over procedures I use with printer strings in a variable, I
  3991.    didn't double the backslash.  So:
  3992.       PRINT FILE FNAME "\027"
  3993.    should work the same as:
  3994.       ResetVar = "\027"
  3995.       PRINT FILE FNAME ResetVar
  3996.  
  3997.    When doing reports in PAL, I typically have printer setup strings stored as
  3998.    memory variables in a procedure, as:
  3999.  
  4000.    proc LSR_ATTS() ; Printer attributes for Laser Printers
  4001.  
  4002.       dynarray PrinterAtt[]
  4003.       PrinterAtt["Reset"]     = "\027E\027(10U"
  4004.       PrinterAtt["Bold_off"]  = "\027(s0B"
  4005.       PrinterAtt["Bold_on"]   = "\027(s3B"
  4006.       PrinterAtt["Condensed"] = "\027(s16.66H"
  4007.       PrinterAtt["Landscape"] = "\027&l1O"
  4008.       PrinterAtt["Portrait"]  = "\027&l0O"
  4009.       PrinterAtt["Regular"]   = "\027&l7.27C"
  4010.  
  4011.    endproc
  4012.  
  4013.    A simple procedure call then puts all your attributes in memory ready to use.
  4014.    Then the following would give a heading in bold courier with the field value
  4015.    in condensed print.
  4016.  
  4017.       lsr_atts()
  4018.       print file fname
  4019.       PrinterAtt["Reset"],PrinterAtt["Regular"],PrinterAtt["Bold_on"],
  4020.       "Field Heading\n",
  4021.       fill("-",13), "\n",
  4022.       PrinterAtt["Bold_off"],PrinterAtt["Condensed"],
  4023.       [FieldValue]
  4024.  
  4025.       <etc.>
  4026.  
  4027. #: 229356 S8/PAL - USING ·
  4028.     24-May-93  11:43:27
  4029. Sb: Ptr Ctrl Codes thru PAL
  4030. Fm: Les Gainous 72731,146
  4031. To: All
  4032.  
  4033. I have a problem with printer control codes.
  4034.  
  4035. The control code for compressed printing (HPII) is \027\040\11516.66\072
  4036.  
  4037. This code is fine.  I am printing a report through PAL printing to a file.
  4038. This file variable contains "prn" (so it'll go to the printer).  I just change
  4039. the variable contents to print to an 'actual' file, if the user wishes.
  4040.  
  4041. If I use:
  4042.  
  4043. PRINT FILE filename "\027\040\11516.66\072"
  4044.  
  4045. the printer goes into compressed mode.  This is good.  BUT, if I put the
  4046. control string into a variable (e.g. Compressed = "\027\040\11516.66\072"),
  4047. then this next statement fails to change the printer.
  4048.  
  4049. PRINT FILE filename Compressed
  4050.  
  4051. The actual control string prints out, verbatim, and the printer is still in
  4052. normal (10cpi) mode.
  4053.  
  4054. Fm: Brian Bushay (TeamB) 76711,516
  4055.  
  4056.    >control string into a variable (e.g. Compressed = "\027\040\11516.66\072"),
  4057.  
  4058.    That should work just fine but if your setting the variable Compressed from
  4059.    a field value then you would have a problem because the "\" character is a
  4060.    special character in a string but not in a field.
  4061.  
  4062.    so   Execute "Compressed = "+[compressed Field]
  4063.  
  4064.    Will work for you
  4065.  
  4066.    or enter the correct string into the field to begin with by direct
  4067.    assignment
  4068.  
  4069.    [compressed field] = "\027(s16.66H"
  4070.  
  4071. Fm: Les Gainous 72731,146
  4072.  
  4073.    RE:  Execute "Compressed = "+[compressed Field]
  4074.  
  4075.    I am retrieving these printer codes from a field. but the above line gives me
  4076.    a script error:  Syntax error: Invalid operator
  4077.  
  4078.                      Compressed =   >027(s16.66H
  4079.                                     |
  4080.                                     |
  4081.                                     +--> the blinking arrow
  4082.  
  4083.    I changed the line to:  EXECUTE "Compressed = [compressed field]" and
  4084.    Compressed now contained the backslashes, but the backslashes are just another
  4085.    character to the PRINT statement and I'm back to square one.
  4086.  
  4087. Fm: Brian Bushay (TeamB) 76711,516
  4088.  
  4089.    >>RE:  Execute "Compressed = "+[compressed Field]
  4090.  
  4091.    >I am retrieving these printer codes from a field. but the above line gives me
  4092.    >a script error:  Syntax error: Invalid operator
  4093.  
  4094.    Ok I left off the Quotes you need around the string value
  4095.  
  4096.    Execute "Compressed = \""+[compressed Field] +"\""
  4097.  
  4098. Fm: Les Gainous 72731,146
  4099.  
  4100.    RE:   Execute "Compressed = \""+[compressed Field] +"\""
  4101.  
  4102. Fm: Dan Bernstein (Sysop) 75300,1726
  4103.  
  4104.    It actually needs to be:
  4105.  
  4106.          EXECUTE "Compressed = \"" + [Setup String] + "\""
  4107.  
  4108. Fm: Les Gainous 72731,146
  4109.  
  4110.    re:  EXECUTE "Compressed = \"" + [Setup String] + "\""
  4111.    Dan, Thank you!
  4112.  
  4113. #: 229379 S8/PAL - USING ·
  4114.     24-May-93  13:12:50
  4115. Sb: #229082-Pdox 4.0 TUtility
  4116. Fm: Dan Bernstein (Sysop) 75300,1726
  4117. To: Malcolm Campbell 71045,2202 (X)
  4118.  
  4119. 1)  There is no equivalent for the -ALL switch, because you need to specify a
  4120. backup name for each table.  You can use the FOR command in a DOS batch file
  4121. to simulate the effect.
  4122.  
  4123. 2)  I'm not aware of any mechanism for forcing TUTILITY into a "quiet" mode.
  4124.  
  4125. #: 229498 S8/PAL - USING ·
  4126.     24-May-93  20:19:18
  4127. Sb: REDEFINING NEWWAITSPEC
  4128. Fm: Tony Ross 75430,402
  4129. To: ALL
  4130.  
  4131. I have a need to build a generic table event handler. I want to associate
  4132. showpulldown and active keys in a table. So when I do a 'wait workspace' the
  4133. menus and active keys will be driven from a control table. My problem is only
  4134. in the keys section. My keys field looks like this
  4135.  
  4136. "F2","F3","F7",-120,-121 etc etc
  4137.  
  4138. I try to issue a newwaitspec like this
  4139.  
  4140. newaitspec key [Keys] ; hoping the keys will come thru from the field
  4141.  
  4142. The system reports 'expecting Pal Keycode'  Even though I know the variable
  4143. has been set up correctly as I would type it in.
  4144.  
  4145. Fm: Brian Bushay (TeamB) 76711,516
  4146.  
  4147.    >newaitspec key [Keys] ; hoping the keys will come thru from the field
  4148.  
  4149.    Sorry the keys have to be listed individually or just use
  4150.    Keys "ALL"
  4151.  
  4152. Fm: Thomas P Knox 70410,764
  4153.  
  4154.    <<I have a need to build a generic table event handler.>>
  4155.    WaitPlusPro 4.0...the only way to go!!
  4156.  
  4157. Fm: Dan Bernstein (Sysop) 75300,1726
  4158.  
  4159.    You'll need to do
  4160.            EXECUTE "NEWWAITSPEC KEY " + [Keys]
  4161.  
  4162. Fm: John B. Moore (TeamB) 71333,1775
  4163.  
  4164.    You will probably get other suggestions, but here is one way around your
  4165.    problem.
  4166.  
  4167.    What you do is define dynarrays that contain the name of the proc that
  4168.    will respond to that keystroke. you can define this dynarray element like
  4169.    so..
  4170.  
  4171.        key_bag[table+field+keycode] = "doPageUp_n"
  4172.  
  4173.      ..or something similar.  All you then need in you wait proc is..
  4174.  
  4175.       If isAssigned(key_bag[table()+field()+Strval(event_bag["KEYCODE"])])
  4176.        Then Execproc key_bag[table()+field()+Strval(event_bag["KEYCODE"])]
  4177.          ok_n = retval
  4178.       Else ok_n = 0  ;pass on the key and do nothing special
  4179.       Endif
  4180.       Return ok_n
  4181.  
  4182.    If you want to deny a keypress just create a "denyaction" proc that
  4183.    returns 1  In this way you have complete flexibility in reacting to
  4184.    any keypress under any circumstances..
  4185.  
  4186. #: 229614 S8/PAL - USING ·
  4187.     25-May-93  10:43:06
  4188. Sb: #229467-Need Search&Replace Proc
  4189. Fm: Dan Bernstein (Sysop) 75300,1726
  4190. To: Mark Gurliacci 72611,2647
  4191.  
  4192. > Anyone know of a good search and Replace procedure for PDOX 4.0?
  4193.  
  4194. Depends what you're trying to do.  If you're attempting to change the entire
  4195. contents of a non-memo field, a CHANGETO query will work nicely.  If you're
  4196. trying to change several occurences of a string in a single memo field, you
  4197. can use Search | ChangeToEnd.
  4198.  
  4199. If you're trying to change multiple memo fields or scripts, or you're trying
  4200. to change a subset of an alpha field, you'll need to use PAL, most likely
  4201. combined with the SCAN command and the MATCH(), SEARCHFROM(), and SUBSTR()
  4202. functions.
  4203.  
  4204. #: 229625 S8/PAL - USING ·
  4205.     25-May-93  12:09:06
  4206. Sb: #228867-Dialog box date input
  4207. Fm: Hank Vanderstoep 72460,314
  4208. To: Alan R Perelgut 70523,2036
  4209.  
  4210. Dan Berstein gave me the solution. Set the variable SDate and Edate to
  4211. BlankDate() before the dialog box starts up. In this way you can still get the
  4212. checking for invalid dates like "04/32/93" that you will not get with a string
  4213. input.
  4214.  
  4215. #: 229626 S8/PAL - USING ·
  4216.     25-May-93  12:09:12
  4217. Sb: No F10 in Wait keylist
  4218. Fm: Hank Vanderstoep 72460,314
  4219. To: All
  4220.  
  4221. I have not been able to get F10 to drop out of the "Wait Workspace" command.
  4222. F1 - F9 work just fine but no F10. What is wrong with this code ?
  4223.  
  4224. Wait WorkSpace
  4225.   Proc "EventMan.CatchTrigger"
  4226.   Trigger "ALL"
  4227.   Key -59,-60,-61,-62,-63,-64,-65,-66,-67,-68,27 EndWait
  4228.  
  4229. All the keys -59 to -67 and 27 work but not -68. Does it have another name,
  4230. other that -68 ??
  4231.  
  4232. Fm: Dickford Cohn 76226,1572
  4233.  
  4234.    Hank, I don't believe -68 (<F10> or MENU) is available in a WAIT.
  4235.  
  4236. Fm: Hank Vanderstoep 72460,314
  4237. To: Dickford Cohn 76226,1572 (X)
  4238.  
  4239.    Just asking the question forced me to look further in my code. A couple
  4240.    of lines above the Wait statement I clear out the top line by issuing
  4241.    a "ShowPulldown" and then a "EndMenu". This clears ou the 1st line but
  4242.    disables the F10 key in the Wait statement.
  4243.  
  4244.    If I remove the Showpulldown and the Endmenu, F10 drops out of the Wait
  4245.    statement as expected.
  4246.  
  4247.    Now ... how does one get rid of the "Image  Undo  Autorefresh  DO-IT!"
  4248.    off the first line WITHOUT a Showpulldown, Endmenu ???
  4249.  
  4250. Fm: Thomas P Knox 70410,764
  4251. To: Hank Vanderstoep 72460,314
  4252.  
  4253.    <<Now ... how does one get rid of the "Image  Undo  Autorefresh  DO-IT!"
  4254.    off the first line WITHOUT a Showpulldown, Endmenu ???>>
  4255.  
  4256.    You could use a 1 row high floating window
  4257.  
  4258. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  4259. To: Hank Vanderstoep 72460,314 (X)
  4260.  
  4261.    When a SHOWPULLDOWN is present, F10 is not trappable by a WAIT/ENDWAIT or
  4262.    GETEVENT.
  4263.  
  4264. #: 229659 S8/PAL - USING ·
  4265.     25-May-93  14:04:17
  4266. Sb: Floating windows
  4267. Fm: Ben Shulman 74017,2146
  4268. To: all
  4269.  
  4270. How can I get rid of floating windows without exiting a script? I have a data
  4271. entry application, and just before bringing up the main form, I create two
  4272. floating windows of one line each, in black, to cover the Paradox status lines
  4273. at top and bottom. This works fine, but when I exit back to my script menu,
  4274. those windows still exist and I can't get rid of them and they make a lot of
  4275. trouble. I've tried every possible window close command I can think of and
  4276. they won't go away. If I run debug I can manually close them, but the same
  4277. commands in the script don't work. Help!
  4278.  
  4279. Fm: Mark Lebowitz 70712,2660
  4280. To: Ben Shulman 74017,2146 (X)
  4281.  
  4282.    I intend to do the EXACT same thing with my application.  What I
  4283.    intend to do is hold onto the window handles of the floating windows
  4284.    using some sort of global variables or dynarray elements, and simply
  4285.    sinking them below the echo layer when I don't want them visible.  You
  4286.    should be able to do this as follows:  ; Create the floating windows
  4287.    DYNARRAY darr_FloatingAttributes
  4288.     darr_FloatingAttributes["FLOATING"] = TRUE
  4289.     darr_FloatingAttributes["HASFRAME"] = FALSE
  4290.     darr_FloatingAttributes["HASSHADOW"] = FALSE
  4291.     darr_FloatingAttributes["HEIGHT"] = 1
  4292.  
  4293.    WINDOW CREATE FLOATING @0,0 ATTRIBUTES darr_FloatingAttributes
  4294.    TO n_Floater1
  4295.    WINDOW CREATE FLOATING @24,0 ATTRIBUTES darr_FloatingAttributes
  4296.    TO n_Floater2
  4297.    .
  4298.    .  ; other script commands
  4299.    .
  4300.    ; Now I want to sink the floating windows
  4301.    darr_FloatingAttributes["FLOATING"] = FALSE
  4302.    WINDOW SETATTRIBUTES n_Floater1 FROM darr_FloatingAttributes
  4303.    WINDOW SETATTRIBUTES n_Floater2 FROM darr_FloatingAttributes
  4304.  
  4305. Fm: Thomas P Knox 70410,764
  4306. To: Mark Lebowitz 70712,2660
  4307.  
  4308.    I think it would be better to just move the window off the screen than
  4309.    change the floating attribute.  You could encounter unwanted problems
  4310.    with the Z-order by doing what you propose.
  4311.  
  4312. Fm: Ben Shulman 74017,2146
  4313. To: Mark Lebowitz 70712,2660
  4314.  
  4315.    I will try that. I believe I did, and, no matter what I do, they won't go
  4316.    away. When I try to select the window or set its attributes, using the
  4317.    handle saved originally, Paradox tells me I have an invalid window
  4318.    handle, even though the value in the handle variable exists and matches
  4319.    the handle value of the window!
  4320.  
  4321. Fm: Dan Bernstein (Sysop) 75300,1726
  4322. To: Ben Shulman 74017,2146 (X)
  4323.  
  4324.    There are two basic methods for handling this:
  4325.  
  4326.    1)  Keep a pair of variables (WinFloat1 and WinFloat2) available; when
  4327.        you want to close them, use WINDOW SELECT and WINDOW CLOSE.
  4328.  
  4329.    2)  Use WINDOW LIST to locate all windows on the desktop, then use WINDOW
  4330.        GETATTRIBUTES to find out which ones are floating.
  4331.  
  4332. Fm: Ben Shulman 74017,2146
  4333. To: Dan Bernstein (Sysop) 75300,1726 (X)
  4334.  
  4335.    Thanks, I'll try it. As I replied to the previous message, so far, I
  4336.    don't seem to be able to select or close or do anything with these
  4337.    windows once they're created, even though I have the window handle.
  4338.  
  4339. Fm: Thomas P Knox 70410,764
  4340. To: Ben Shulman 74017,2146 (X)
  4341.  
  4342.    If when you WINDOW SELECT the floating window and do a WINDOW CLOSE, the
  4343.    window should disappear.  You can also move the window off the workspace
  4344.    without selecting it.
  4345.  
  4346.    Read page 182-83 in the PAL Programmer's Guide for some things to
  4347.    remember when working with floating windows.
  4348.  
  4349. Fm: Ben Shulman 74017,2146
  4350. To: Thomas P Knox 70410,764 (X)
  4351.  
  4352.    Thanks. I'm using the techniques described on pages 182-183, which work
  4353.    fine to enable me to access various other windows after creating the
  4354.    two floating windows. The problem is that, with a valid window handle,
  4355.    using window select and window close, they do not close, but remain on
  4356.    the workspace, preventing further code from working properly. I will try
  4357.    everyone's suggestions, and post the code if there is still a problem.
  4358.    Thanks again.
  4359.  
  4360. #: 229732 S8/PAL - USING ·
  4361.     25-May-93  20:54:46
  4362. Sb: #229685-Text display
  4363. Fm: Steve Erbach (NEWPALS) 70620,3432
  4364. To: DOUG KANTER 70724,2343 (X)
  4365.  
  4366. The Dan Utilities (DANUTL.EXE in Lib 7 or 8, I believe, by Dan Paolini) and
  4367. Virginia Sauer's TOOLBX.EXE (again Lib 7 or 8) contain some generic message
  4368. display routines that respond to a keypress.  They don't use the TEXT ENDTEXT
  4369. structures, though.
  4370.  
  4371. Fm: DOUG KANTER 70724,2343
  4372.  
  4373.    After all I've tried, I don't care if they use a bran muffin recipe,
  4374.    Steve.  I just want my help screens to work!  Thanks for the tips.
  4375.  
  4376. Fm: Thomas P Knox 70410,764
  4377.  
  4378.    I'm E-Mailing you my favorite utility message proc to display text and
  4379.    have the user respond.  Script header has example and description.
  4380.  
  4381. #: 229860 S8/PAL - USING ·
  4382.     26-May-93  11:26:34
  4383. Sb: PAL run
  4384. Fm: chris pengelly 100063,2427
  4385. To: Dev Vamathevan 71333,2241
  4386.  
  4387. i have a pdox 4.0 script that runs a batch file via RUN or RUN BIG. the
  4388. section of code loops, so the batch file may run many times. after about 20
  4389. iterations, there is no conventional memory left in the dos command shell.
  4390.  
  4391. the batch file creates a subdirectory, uses SUBST to allocate a drive letter
  4392. to the subdir, unzips some files to the virtual drive and makes a list of the
  4393. files that is left for importing into a pdox table. another run command later
  4394. in the loop releases the subst virtual drive.
  4395.  
  4396. conventional memory drops from 317K during the first time to less than 90K or
  4397. so before zip is to big to fit in memory. presumably the batch file ending
  4398. closes the command.com shell, so why is there an accumulation of used memory?
  4399.  
  4400. Fm: Dan Bernstein (Sysop) 75300,1726
  4401.  
  4402.    First of all, it's not a good idea to address a message to a specific
  4403.    Borland engineer -- I'm usually the only one reading this section, and
  4404.    I primarily look for messages directed to "All" or "Sysop".
  4405.  
  4406.    In your script, you're using SUBST, which is a TSR.  This is probably the
  4407.    primary source of your difficulties, and I'm actually surprised that you
  4408.    aren't experiencing more problems.  I'd suggest reconstructing your code
  4409.    to avoid the use of SUBST.
  4410.  
  4411. #: 229876 S8/PAL - USING ·
  4412.     26-May-93  12:48:57
  4413. Sb: AUTOLIB
  4414. Fm: Stace Tate 71075,3127
  4415. To: Dan Paolini 75300,1734 (X)
  4416.  
  4417. We run a manufacturing plant using a PAL application (4.0 runtime compatible
  4418. mode) to collect process and process control data.  This application has 59
  4419. scripts ranging in size from 5K to 115K (1.7 MB Total) writing to 26 libraries
  4420. of about 1 meg total.  The autolib statement contains 25 of these libraries.
  4421.  
  4422. My question is wheather it would be faster to write more scripts to fewer
  4423. larger libraries or stay with what we have?  In other works can Paradox  find
  4424. the required procedure faster in 2 libs totaling 1 meg or 10 libs totaling 1
  4425. meg?
  4426.  
  4427. Fm: Harry Goldman (TeamB) 75300,1733
  4428.  
  4429.    I would suggest that you create one or two LIB's instead of 25. The way PDOX
  4430.    works, it will search down the AUTOLIB 'path' to find a procedure. If the
  4431.    PROC is found it will mark the spot (so to speak) so that future calls don't
  4432.    require the same search.
  4433.  
  4434.    If you have 25 LIB files, there will be a certain amount of overhead
  4435.    involved in opening and closing each one. Use one or two LIB's and that
  4436.    overhead is greatly reduced.
  4437.  
  4438. Fm: Stace Tate 71075,3127
  4439.  
  4440.    Thanks Harry,  That confirms what I suspected. I'll give it a try next
  4441.    opportunity I have to change all the writelib's.
  4442.  
  4443.    As a interim step I setup the starting script to set autolib to only the
  4444.    necessary libs then add to the autolib as required.
  4445.  
  4446. #: 230030 S8/PAL - USING ·
  4447.     27-May-93  09:58:11
  4448. Sb: Pdox3.5 PAL SCAN
  4449. Fm: Kimara Sajn 73340,1150
  4450. To: All
  4451.  
  4452.    Has anyone ever incountered a "skipping" type problem using SCAN in a proc.
  4453. Here's the situation, SCANing a table for records that are a certain date and
  4454. have specific fields filled in, but it appears to skip some records that meet
  4455. the test.  When I go back in to post again, it picks them up.
  4456.  
  4457. Fm: Brian Bushay (TeamB) 76711,516
  4458.  
  4459.    >   Has anyone ever incountered a "skipping" type problem using SCAN in a proc.
  4460.    >Here's the situation, SCANing a table for records that are a certain date and
  4461.  
  4462.    Scan will skip records if your changing the key field values.  Because this
  4463.    will cause some records to move
  4464.  
  4465.  
  4466.    And if you delete records because the record below it will move into the
  4467.    deleted records position.
  4468.  
  4469. Fm: Dan Bernstein (Sysop) 75300,1726
  4470.  
  4471.    There are two likely causes for your problem:
  4472.  
  4473.    1)  In a SCAN...ENDSCAN, you must always have the record/table cursor at the
  4474.    exact same point at the start and end of the loop.  In other words, commands
  4475.    such as UP, SKIP, and DEL are a bad idea.  If you MOVETO a different table,
  4476.    you must always MOVETO back to the original table before the ENDSCAN.
  4477.  
  4478.    2)  Your SCAN FOR or IF condition isn't working properly.  You might want to
  4479.    try using the debugger and stepping through the code to see which records it
  4480.    stops at, the using the PAL menu (Alt-F10 | Value, mostly) to figure out why
  4481.    it doesn't stop at certain records.
  4482.  
  4483. Fm: Kimara Sajn 73340,1150
  4484.  
  4485.       Ok thanks, I thought that might be what was happening (i.e. the deleted
  4486.    records changing the marker).  Is there any way around that? Here's the
  4487.    situation:
  4488.  
  4489.       I have two tables, info from table A is pumped into table B (along with
  4490.    other user provided info) if it meets the criteria of date today or less. It
  4491.    also gets checked to see that valid info has been entered.  What I am trying
  4492.    to do (with little success :) ) is delete out the info that gets pumped to
  4493.    table B, but leave the others in table A.  I was attempting to do this by
  4494.    using the SCAN command, but get the "skip" phenom.
  4495.  
  4496.  
  4497.       Any ideas you have would be great. Thanks Again.
  4498.  
  4499. Fm: Dan Bernstein (Sysop) 75300,1726
  4500.  
  4501.    Here's the basic algorithm for a SCAN equivalent:
  4502.  
  4503.    WHILE NOT EOT()
  4504.       IF RecordShouldBeDeleted() THEN
  4505.          DEL
  4506.       ELSE
  4507.          SKIP
  4508.    ENDWHILE
  4509.  
  4510. #: 230158 S8/PAL - USING ·
  4511.     27-May-93  23:49:41
  4512. Sb: Time calculations
  4513. Fm: FAZUR ESTRADA 72470,1615
  4514. To: All
  4515.  
  4516. I am designing a production database. I have two fields for start up and stop
  4517. times (Start, Stop). the data entry clerk will enter military time as follows:
  4518.                    Start     Stop        Tot hrs
  4519.                    7:00     15:00          8.0
  4520.  
  4521. I need to perform a calculation Stop-Start= Tot hrs. How do we perform
  4522. calculations with this time format?, thanks for your help.
  4523.  
  4524. Fm: Dan Bernstein (Sysop) 75300,1726
  4525.  
  4526.    Basically, you need to convert the string to a number.  The approach I
  4527.    tend to use converts 13:30 to 13.5, by dividing the minutes by 60.
  4528.  
  4529. Fm: JOHN R NELSON 70641,3562
  4530.  
  4531.    I am E-mailing you my own procedure.  It is called Timecalc.sc.  It includes a
  4532.    demo and you will see that you do not have to convert the time to a number.
  4533.    However, it does require the start and stop dates so that going past midnight
  4534.    may be accounted for.
  4535.  
  4536. Fm: JOHN R NELSON 70641,3562
  4537.  
  4538.    I am E-mailing you my own procedure.  It is called Timecalc.sc.  It includes a
  4539.    demo and you will see that you do not have to convert the time to a number.
  4540.    However, it does require the start and stop dates so that going past midnight
  4541.    may be accounted for.
  4542.  
  4543. #: 230182 S8/PAL - USING ·
  4544.     28-May-93  01:59:34
  4545. Sb: Concurrent Processing?
  4546. Fm: Gary M. Mugford 70274,2254
  4547. To: all
  4548.  
  4549.   As described elsewhere, I fought the nightmarish demon of possible database
  4550. corruption of a 432K record, 230+meg database by finding some coding errors on
  4551. my part and a partially connected power supply that was slowing down the
  4552. server.
  4553.   Still, I have a desire to at least verify the database. Multi-processors
  4554. have been in the news lately and got me thinking if there was an applicability
  4555. to this problem.
  4556.  
  4557.   An idea-- If I carved the database into smaller parts with a
  4558. Continue_Changes_Query using number ranges on the single-field primary index,
  4559. I could run the query simultaneously on about ten machines. The resulting
  4560. answers would then by run through TUtility (exiting off the network and
  4561. rebooting into non-network mode to exact as large a speed as possible from
  4562. TUtility). The presumption is that if ALL the answers passed the test, the
  4563. database would post ipso facto be verified. If one of the sessions revealed
  4564. corruption, TUtility would handle it. Then, I would just delete the original
  4565. (forms and reports are save umpteen places) and then combine the segments back
  4566. together again. Voila, verified and packed.
  4567.  
  4568.   BUT ... it occured to me that any corruption would do in the offending
  4569. query. Could verify me as simple as doing the query? If it succeeds, is
  4570. TUtility necessary? Is this chop and test a good idea? And how come I have to
  4571. exit Paradox to run TUtility to avoid the NOT ENOUGH MEMORY errors run big
  4572. seems to result in?
  4573.  
  4574. Fm: Thomas P Knox 70410,764
  4575.  
  4576.    I think the idea of splitting the database into smaller parts is a logical
  4577.    one.  We did something similar in the past, but it was for parsing large
  4578.    amounts of text, and not identifying corruption.
  4579.  
  4580.    I would guess that if the table is corrupted, the queries may work
  4581.    successfully, and you couldn't assume that if the queries completed ok, that
  4582.    the table was ok.
  4583.  
  4584.    If you have the 10 PC's available, go for it!
  4585.  
  4586. Fm: Gary M. Mugford 70274,2254
  4587.  
  4588.    Based on feedback here, I'm going to go ahead with my divide and conquer
  4589.    project. It won't happen this week, but I will keep everybody posted. I will
  4590.    be doing rebuilds as it is the consensus that it's possible to successfully
  4591.    query with corruption. At least I get a packed database out of it.
  4592.  
  4593. Fm: Harry Goldman (TeamB) 75300,1733
  4594.  
  4595.    There are several concerns that you will need to be aware of, and they all
  4596.    deal with data integrity. On the whole your idea doesn't sound too bad, and
  4597.    you may get the desired result. BUT:
  4598.  
  4599.    (1) Know ahead of time the exact number of records each query should get,
  4600.    and verify that those records do in fact arrive in the answer table.
  4601.  
  4602.    (2) Sometimes table corruption will cause the number of records in your
  4603.    table to not be in sinc with the record X of Y indicator. If the total
  4604.    number of records that you get is greater then the number in the original
  4605.    table (barring duplicate queries) you are still OK. Its if you loose records
  4606.    that you have a problem.
  4607.  
  4608.    (3) KEY the ANSWER tables BEFORE they are rebuilt.
  4609.  
  4610.    (4) After the rebuild, RESTRUCTURE the ANSWER tables to ensure that they are
  4611.    packed as tightly as possible.
  4612.  
  4613.    (5) When you are adding the tables back together, do them in sequence. Start
  4614.    by renaming the lowest ANSWER table to the new table's name. Then add the
  4615.    next lowest to it, then the next after that, etc. By doing so you will
  4616.    ensure that the table will stay as small as possible, and have as few split
  4617.    blocks as possible.
  4618.  
  4619.    (6) Check you table size when you are done, how does it compare to the
  4620.    original ? Estimate the overall size, how does it match to that ?
  4621.  
  4622.    If you do this carefully you should be fine.
  4623.  
  4624. Fm: Dan Bernstein (Sysop) 75300,1726
  4625.  
  4626.    If you're really serious about allocating a bunch of hardware to handle your
  4627.    data integrity problems, my instinct would be to also start investigating a
  4628.    move to an SQL-based server.  Minicomputers usually have more in the way of
  4629.    fault-tolerant hardware, and SQL servers tend to have more-advanced data
  4630.    recovery mechanisms.
  4631.  
  4632.    Your basic idea about splitting the table is a good one, I think, though
  4633.    there'll probably be some refinements to be made to speed it up.  (No ideas
  4634.    off-hand, though)
  4635.  
  4636. Fm: Gary M. Mugford 70274,2254
  4637.  
  4638.    This project is headed to InterBase sometime this calendar year. But I got
  4639.    to nurse it there in a paradox dos world. Going to give the project a try
  4640.    sometime between now and the end of the month. I'll let you know how it went.
  4641.  
  4642. #: 230286 S8/PAL - USING ·
  4643.     28-May-93  17:41:06
  4644. Sb: Linked MultiTable Forms
  4645. Fm: george reis 70724,1324
  4646. To: All
  4647.  
  4648. I am hoping for criticisms, suggestions, and any other kind of help for a data
  4649. entry system I am developing.  The system is comprised of a number of
  4650. multi-table forms that are linked together via shadow tables to create a
  4651. multi-form form. My approach is as follows.
  4652.  
  4653. Suppose that I am in a detail table of a form (call it the parent form) and I
  4654. want to move to a detail table in a linked form (call it the child form.)
  4655. Here's what I do.  For brevity I'll skip Arrive and Depart Triggers, etc.
  4656.  
  4657.        1)  Save key values pertinent to the Child Form.
  4658.        2)  PostRecord   ; to permit leaving the Parent detail table
  4659.        3)  Moveto "ParentFormMastertable"
  4660.        4)  PostRecord   ; to permit leaving the Parent Master table
  4661.        5)  Window Select ShadowTableWindow
  4662.        6)  Enter key values into the shadow table
  4663.        7)  Do_It!  CoEditKey   ; to toggle to the MultiTable Child Form
  4664.                                ; whose master table is the ShadowTable
  4665.        8)  PickForm ChildForm
  4666.        9)  Moveto "ChildFormDetailTable"
  4667.  
  4668. This process takes about 10 seconds on a 386/25 4Meg system when the tables
  4669. are almost empty.  I would sure like to cut that to 5 seconds at most.
  4670.  
  4671. Am I doing useless steps?  Is there a better approach?
  4672.  
  4673. Perhaps an outline of the data structure would be helpful.  The top level has
  4674. 4 M-M relationships with second level tables.  One of these second level
  4675. tables relates M-M with a table that relates 1-M with 4 tables.
  4676.  
  4677. Fm: Brian Bushay (TeamB) 76711,516
  4678.  
  4679.    >       6)  Enter key values into the shadow table
  4680.    ;at this point you start going astray
  4681.  
  4682.    >7)  Do_It!  CoEditKey   ; to toggle to the MultiTable Child Form
  4683.    >                              ; whose master table is the ShadowTable
  4684.    >       8)  PickForm ChildForm
  4685.    >       9)  Moveto "ChildFormDetailTable"
  4686.  
  4687.    First when you start the Application put all the tables you need on the
  4688.    Workspace and choose the correct form for each.
  4689.    You probably want to move the Table windows you don't want to see off of the
  4690.    visible portion of the screen
  4691.  
  4692.    When you want to move to another form Unlock the record you on and move
  4693.    directly to the Form Window you want with Window Select
  4694.  
  4695.    Enter  the values into that Shadow Table and use RESYNCKEY to bring up the
  4696.    correct detail.  No need to use Do_it!
  4697.  
  4698.    Now move to the child table.
  4699.  
  4700. Fm: george reis 70724,1324
  4701.  
  4702.    Thanks for the clarification.  Using RESYNCKEY has moved my average display
  4703.    time from 10sec down to 7sec.  I appreciate your help.
  4704.  
  4705.    Maybe you can do the same thing for the rest of my loading procedure.  I don't
  4706.    use Window Select, because the window handle may be no longer valid. Here's my
  4707.    understanding of the situation.
  4708.  
  4709.    According to Salcedo and Rudy's book, there is a limit of 24 images allowed on
  4710.    the workspace.  Testing my app at various places, I find the number of images
  4711.    varies from 3 (while in a small subform) to 15 (while in the master form.)
  4712.    Since nimages() varies as I move around the app, I conclude that images are
  4713.    being destroyed.  I have verified this in a few cases by creating all windows
  4714.    at the beginning of the app, and then noting that they need to be recreated
  4715.    when I need them. (Also, the number of registered files varies from 18 to 42,
  4716.    whatever that means.)
  4717.  
  4718.    In any event, I am using Henrik Bechmann's EventMan, and his idea of a
  4719.    SetFocus routine rather than a WindowSelect.  In order to SetFocus I do the
  4720.    following steps:
  4721.  
  4722.          1) See if the WindowName that I want to select is registered with
  4723.             EventMan and if so, does the handle correspond to an existing
  4724.    window.
  4725.  
  4726.          2) If the answer to 1) is yes, then I can Window Select.  If not,
  4727.             then I have to recreate the window.  Then I remove the illegal
  4728.             handle from the WindowObjectTag dynarray, and insert the new
  4729.             handle.  Next I update the ObjectTagWindow dynarray with the new
  4730.             handle.
  4731.  
  4732.          3) If the window I want to select contains a lookup table, then the
  4733.             process is even more tedious because, chances are that the window
  4734.             containing the base table for the lookup is also gone (maybe this
  4735.             always true?).  So my SetFocus routine for the lookup table may
  4736.             contain a SetFocus routine for the underlying table.
  4737.  
  4738.    If you see any way to simplify this process, I will sure appreciate hearing
  4739.    about it.
  4740.  
  4741.    There will still remain the slowness while in the table.  It seems that Pdox
  4742.    is not loading the "right" things  eg. Press down--wait 2or3 seconds for
  4743.    "down" (and possible related triggers?) to load.  The next down is fast
  4744.    enough.  Now press "Up" and wait all over again.  Is there some way to make
  4745.    sure that Pdox loads the "right" stuff as I move from window to window?
  4746.  
  4747.    BTW, I don't think the lack of speed is due to lack of memory.  When I load
  4748.    Pdox, memleft is 2Meg.  If I set tablek at 200, memleft never falls below
  4749.    1.3Meg as I wander around the app.  If I accept Pdox's default assignment of
  4750.    800 for tablek, memleft is reduced to around 800K, but it never falls below
  4751.    750K.  (Of course, I can't shell to Pal-Edit--no memory left.)
  4752.  
  4753. Fm: Brian Bushay (TeamB) 76711,516
  4754.  
  4755.    Images are only destroyed if you have multiple images of the same table on
  4756.    the workspace when you go in to CoEdit.  Nimages() will report different
  4757.    number depending on whether your in a multi table form or not.
  4758.  
  4759.    In a mulit table form all embeded tables will be counted as images.  Any
  4760.    table windows that are also embeded tables on the multi table form will be
  4761.    hidden (and not accessible by Window Select) when your in the multi table
  4762.    form.
  4763.    Any time you have a form Window it will be destroyed if you move to a multi
  4764.    table form that uses that table as an embeded table.
  4765.  
  4766.    For generic application generators like EventMan you need to worry about
  4767.    windows getting destroyed or hidden.  However if your not trying to design a
  4768.    generic application you should be able to use Window Select for maximum
  4769.    speed.
  4770.  
  4771.    Your application seems to have enough memory from the numbers you put up.
  4772.    It is normal for there to be a slight lag the first time a procedure is
  4773.    read.  After that you shouldn't be able to notice.
  4774.    If your using Closed procedures (and you shouldn't be) then they will cause
  4775.    a reread of procedures they contain.
  4776.  
  4777. Fm: george reis 70724,1324
  4778.  
  4779.    I was not having slight lags, so I knew something was wrong.  I am
  4780.    embarrased at what I discovered.  The lib containing most of the procs
  4781.    for the linked multitable forms was fifth in line in my autolib
  4782.    statement, after about 200K of other stuff.  Moving it to first place
  4783.    reduced my delays by two-thirds (ie.  it now takes 1/3 the time.)  I now
  4784.    have "slight lags" and acceptable performance.   Thanks for your help.
  4785.  
  4786. #: 230375 S8/PAL - USING ·
  4787.     29-May-93  13:53:06
  4788. Sb: #230372-Finding Duplicate REC.
  4789. Fm: Brian Bushay (TeamB) 76711,516
  4790. To: B.C. 72570,2072 (X)
  4791.  
  4792. >I       have a DB which consist of name,SSN,and birthdate fields.  I want to
  4793. >create a script that will locate all duplicate names.  Unfortunately the first
  4794. >and last name are in the same field.  Is their any way to do this?
  4795.  
  4796. If I understand your question correctly you would like to get all records
  4797. where the value in the [Name] field occurs in another record.
  4798.  
  4799. If so use a query like this
  4800.  
  4801. yourTbl   | Name              | SSN    | Birth Date  |
  4802.           | Check _n          | Check  | Check       |
  4803.           | _n Count All  > 1 |        |             |
  4804.  
  4805. Brian
  4806.  
  4807. Note if there are a lot of duplicates for the same name then this query may
  4808. run out of space.  Essentially it must process the Square of the number of
  4809. duplicates for anyone name.  so if You have 2 John Jones in your database 4
  4810. records are processed by the query.  If you have 3 it goes up to 9 ect.
  4811.  
  4812. If your in this situation you can do it as two separate Queries.
  4813.  
  4814. Query 1
  4815.  
  4816. yourTbl   | Name                            | SSN    | Birth Date  |
  4817.           | Check , Count All  as Number of |        |             |
  4818.  
  4819. Query two use the Answer table
  4820. to query back to the original table for any name that has a count >1
  4821.  
  4822. Fm: Wayne Schulz 75410,2434
  4823.  
  4824.    What about restructuring the table with the SS# as key, and then letting
  4825.    all the duplicates pop out automatically? -- assuming the SS# has been
  4826.    assigned to every field...
  4827.  
  4828. #: 230376 S8/PAL - USING ·
  4829.     29-May-93  14:22:17
  4830. Sb: Another way?
  4831. Fm: David Chiaramonte 71052,1616
  4832. To: sysop (X)
  4833.  
  4834. I created a script to keep track of daily shipping and  inventory totals.  The
  4835. two tables are:
  4836.  
  4837. ONHAND (Item and total in stock)
  4838.  
  4839. and
  4840.  
  4841. Shipping  (Item and qty being taken out of stock.)
  4842.  
  4843. Right now, the script does a query on shipping by selectiing the item and CALC
  4844. SUM on the qty.  This gives me an answer table with the  grand total for each
  4845. item.
  4846.  
  4847. I then run another query using example elements to link the item in the answer
  4848. table to the item in ONHAND and use examples for the QTY  in both tables.  It
  4849. just subtracts the two qty elements from each other.  I then add the new
  4850. results to the on hand table.
  4851.  
  4852.  
  4853. This method works fine, however it is a bit slow.
  4854. Is there a better way?
  4855.  
  4856. Table structure:
  4857.  
  4858. SHIPPING =
  4859.  
  4860. Location name  (A20)
  4861. ITEM  (A20)
  4862. QTY   (N)
  4863.  
  4864. ONHAND =
  4865. ITEM  (A20)
  4866. QTY   (N)
  4867.  
  4868. Fm: Brian Bushay (TeamB) 76711,516
  4869.  
  4870.    >I then run another query using example elements to link the item in the
  4871.    answer >table to the item in ONHAND and use examples for the QTY  in
  4872.    both tables.  It >just subtracts the two qty elements from each other.
  4873.    I then add the new >results to the on hand table.
  4874.  
  4875.    You should be able to do a Changeto Query instead of the Query, ADD
  4876.    process.  That will save you a little time
  4877.  
  4878. #: 230390 S8/PAL - USING ·
  4879.     29-May-93  18:49:46
  4880. Sb: Send Report to variable
  4881. Fm: Phillip Coomer 70410,335
  4882. To: All
  4883.  
  4884. i Am trying to run a report to a file ......... The file name is
  4885. entered by the user and assigned a variable FN I am haveing trouble getting
  4886. Paradox 4.01 to send the report to the file name. HELP
  4887.  
  4888. Fm: Thomas P Knox 70410,764
  4889.  
  4890.    Use the select command:
  4891.  
  4892.    TableName = "YourTbl"
  4893.    ReportNum = 1
  4894.    ReportFileName = "Report.txt"
  4895.  
  4896.    Menu {report} {output}
  4897.    select TableName
  4898.    select ReportNum
  4899.    {file}
  4900.    select ReportFileName
  4901.  
  4902.    You can use the SELECT command to enter a variable value for any Paradox
  4903.    prompt requiring a user's input.  This will enter the value and continue.
  4904.  
  4905. Fm: Harry Goldman (TeamB) 75300,1733
  4906.  
  4907.    There may be several problems here, its tough to say. The most common
  4908.    'gotcha' is that if the file already exists you will be prompted for
  4909.    {Cancel} {Replace}. Try this:
  4910.  
  4911.    {Report} {Output} Select Tablename.a Select RptNum.n {File}
  4912.    If MenuChoice() = "Cancel" Then
  4913.       {Replace}
  4914.    Endif
  4915.  
  4916. #: 230474 S8/PAL - USING ·
  4917.     30-May-93  23:34:27
  4918. Sb: CSUM() not Equal ?!?!?!
  4919. Fm: Bill Darron 70650,2212
  4920. To: all
  4921.  
  4922. I am dumbfounded.  I have an application where I let users typein the
  4923. value of a check they are writing (write_a_check_for) and then they
  4924. can split the dollars amongst any number of categories.  The users
  4925. scroll around inside an answer table, typing in the "split dollars"
  4926. until they are finished.  I have movement under control from an event
  4927. driven wait proc.
  4928.  
  4929. When the users press [F2], then we do a quick check to make sure
  4930. the "split dollars" equal the whole.  Sometimes this works great,
  4931. other times it bombs.  The total dollar amount I am looking for is
  4932. 8944.70, and the pieces are in an answer table that looks like this:
  4933.  
  4934. ; Structure of "C:\\PDOX40\\ANSWER"
  4935. ; "Leger #"                   :  "A6",
  4936. ; "Leger Category"            :  "A40",
  4937. ; "Split Dollars"             :  "$"
  4938.  
  4939. and the split dollars looks like this:
  4940.  
  4941. Leger #  Leger Category                            Split Dollars
  4942. -------  ----------------------------------------  ----------------
  4943. 1900     FIT                                              3,440.59
  4944. 1910     SSMD - EE                                        1,792.57
  4945. 1915     SSMD - ER                                        1,792.57
  4946. 1940     SUI - EE                                             0.00
  4947. 1942     SUI - ER                                           599.03
  4948. 1943     SDI - EE                                           204.22
  4949. 1945     SIT                                              1,043.30
  4950. 1950     FUTA                                                72.42
  4951.  
  4952. The dollars DO equal 8944.70, but the code below doesn't
  4953. (it is part of my wait proc):
  4954.  
  4955. IF CSUM("answer","split dollars" ) <> write_a_check_for
  4956.      THEN
  4957.      BEEP
  4958.      SLEEP 100
  4959.      BEEP
  4960.      MESSAGE "The total of the Split does not Equal the Amount of this "+
  4961.      "check.  Please correct your math, and press [F2] again when finished."
  4962.      SLEEP 2000
  4963.      RETURN 1
  4964. ELSE
  4965.      RETURN 2
  4966. ENDIF
  4967.  
  4968. Fm: Dickford Cohn 76226,1572
  4969.  
  4970.    You are working far too hard on this, IMO.  There is a script in the
  4971.    LIBS here called tomony.sc or some such which relieves this pain
  4972.    substantially...I've done a fair rewrite of it to suit my paricular
  4973.    circumstances...no error checking at this level is required...the
  4974.    dolllar amounts are made to agree beforehand...THEN you run the
  4975.    conversion to 'words'...much easier, IMO.  If you need further
  4976.    assistance, just holler, ok?
  4977.  
  4978. Fm: Bill Darron 70650,2212
  4979.  
  4980.    Thank you for your help, but I believe you misunderstood my problem.  The fact
  4981.    is that I AM using the TOMONEY script to convert the TOTAL AMOUNT of the check
  4982.    to words.  The problem comes later when I have written the check, and then I
  4983.    want to divide the total amount amongst several different ledger accounts.  I
  4984.    see I have a few replys, so I will read on.  Read them too and see if you have
  4985.    anything to add.
  4986.  
  4987. Fm: Dickford Cohn 76226,1572
  4988.  
  4989.    Yeah Bill, I missed your point by a country mile...been planning to upgrade
  4990.    the RAM between my ears for some time now...maybe then I can hold more than
  4991.    one thought in memory at a time then...whaddaya think?<g>.
  4992.  
  4993.    I think the other answers you got were the *right* ones...sorry for butting
  4994.    in.  Have a good holiday.
  4995.  
  4996. Fm: Don Schubert (TeamB) 70007,4654
  4997.  
  4998.    Sounds like binary rounding error from here...
  4999.  
  5000. Fm: Brian Bushay (TeamB) 76711,516
  5001.  
  5002.    Because Paradox stores numbers internally in Binary there are problems in
  5003.    comparing decimal fractions that were computed from addition to numbers that
  5004.    were entered directly.
  5005.  
  5006.    The problem is that not all decimal fractions can be exactly represented in
  5007.    binary.
  5008.  
  5009.    The situation is analogous to adding 1/3.  If you represent 1/3 as a decimal
  5010.    fraction you use
  5011.    .333333333333333333333333333333333333333333333333333333333333
  5012.  
  5013.    But 3 of these do not = 1
  5014.  
  5015.    So use
  5016.  
  5017.    IF Round(CSUM("answer","split dollars"),2) <> Round(write_a_check_for,2)
  5018.  
  5019. Fm: Bill Darron 70650,2212
  5020.  
  5021.    Once again you come through!  Thanks alot!  Do you know when Borland is going
  5022.    to work out this rounding thing?  I have had several problems with ROUND().  I
  5023.    didn't know that CSUM() and IMAGECSUM() were affected.
  5024.  
  5025.    Quattro users have problems too.  Trying to match Quattro rounding and Paradox
  5026.    rounding causes conflict.
  5027.  
  5028.    My wish list is for the "$" formatted fields always to round correctly, or
  5029.    stick to 2 decimals.  Otherwise, use "N" format.
  5030.  
  5031. Fm: Dickford Cohn 76226,1572
  5032.  
  5033.    Bill, many programs suffer from that same problem...it has to do with
  5034.    conversion of numbers stored in binary format to decimal equivalent.  I dunno
  5035.    why software purveyors have *not* addressed the problem...it is quite
  5036.    pervasive.
  5037.  
  5038. Fm: Steve Erbach (NEWPALS) 70620,3432
  5039.  
  5040.    >> conversion of numbers stored in binary format to decimal equivalent.  I
  5041.    dunno why software purveyors have *not* addressed the problem...it is quite
  5042.    pervasive. <<
  5043.  
  5044.    Hmmm.  I suppose if the chips were converted to decimal instead of binary
  5045.    logic we could get rid of the problem.  This does not seem like a problem that
  5046.    _can_ go away.
  5047.  
  5048. Fm: Dickford Cohn 76226,1572
  5049.  
  5050.    Now you've gone and done it!!!  You were sworn to secrecy!!!  I've almost
  5051.    completed work on that chip, too...it's gonna be called the DECIUM (kinda
  5052.    original, no?).  No heat problems either...it uses only *one* transistor (no
  5053.    sense complicating things).  If I could just get the size and weight down, I'd
  5054.    have it made.  Right now, it's about 180# and sports a Casio calculator
  5055.    built-in...looks almost like a human on 'ludes!  Fast???  You betcha!
  5056.  
  5057.    Gotta go now...just because of you, I gotta write up a press release.
  5058.  
  5059. Fm: Don Schubert (TeamB) 70007,4654
  5060.  
  5061.    I doubt Borland or any other software company will "work out this
  5062.    rounding thing". Accounting programs do it, but they have a fixed task.
  5063.    DBMS programs will not because you need the flexibility to code for
  5064.    every case, not just rounding to the third decimal.
  5065.  
  5066.    Spreadsheets, however, could provide a financial rounding switch that
  5067.    would stay with the worksheet.
  5068.  
  5069. Fm: Brian Bushay (TeamB) 76711,516
  5070.  
  5071.    >Do you know when Borland is going to work out this rounding thing?
  5072.    I don't really expect there to be a change.  You will have to handle the
  5073.    Round() yourself
  5074.  
  5075.    >My wish list is for the "$" formatted fields always to round correctly, or
  5076.    >stick to 2 decimals.  Otherwise, use "N" format.
  5077.    That would be ok with me but I suspect it would break a few applications.
  5078.  
  5079. Fm: Dan Bernstein (Sysop) 75300,1726
  5080.  
  5081.    Looks like you've gotten your answers for the most part.  If you (or
  5082.    anyone else) wants more info on the subject, you might want to download
  5083.    TechInfo Sheet #1148 from Library 12.
  5084.  
  5085. #: 230638 S8/PAL - USING ·
  5086.     01-Jun-93  03:04:30
  5087. Sb: #230616-Importing files
  5088. Fm: Thomas P Knox 70410,764
  5089. To: FAZUR ESTRADA 72470,1615
  5090.  
  5091. I failed to mention that whenever you are converting date fields you need
  5092. to validate the data.  There are a few ways to do this.  In your case you
  5093. mentioned that the nonvalid values you get are "000000".  The following
  5094. modification will correct that situation.
  5095.  
  5096. In this particular case you can eliminate the use of the intermediate variables
  5097. of GoodDate and BadDate and work directly with the fields themselves.
  5098.  
  5099. If you are using Paradox 4.0 you can use:
  5100.  
  5101. Scan
  5102.     [GoodDOH] = iif(numval([BadDOH]) = 0, blankdate(),
  5103.                     dateval(substr([BadDOH]),3,2) + "/" +
  5104.                             substr([BadDOH]),5,2) + "/" +
  5105.                             substr([BadDOH]),1,2))
  5106.  
  5107. endscan
  5108.  
  5109. If you are using Paradox 3.5 use:
  5110.  
  5111. Scan
  5112.  
  5113.     if numval([BadDOH]) = 0 then
  5114.         [GoodDOH] = blankdate()
  5115.         loop
  5116.     endif
  5117.  
  5118.     [GoodDOH] = dateval(substr([BadDOH]),3,2) + "/" +
  5119.                         substr([BadDOH]),5,2) + "/" +
  5120.                         substr([BadDOH]),1,2))
  5121.  
  5122. endscan
  5123.  
  5124. The above example only tests for a nonvalid value of "00000".  In other
  5125. situations, you may get non "000000" values that do not convert to valid dates.
  5126.  
  5127. A better (and more generic) approach would be to convert the value and test
  5128. the result.
  5129.  
  5130. scan
  5131.     GoodDate = dateval(substr([BadDOH]),3,2) + "/" +
  5132.                        substr([BadDOH]),5,2) + "/" +
  5133.                        substr([BadDOH]),1,2))
  5134.  
  5135.     if GoodDate = "Error" then      ; returned by dateval() if not a valid date
  5136.         [GoodDOH] = blankdate()     ; assign a blankdate() or other default date
  5137.     else
  5138.         [GoodDOH] = GoodDate        ; date is valid
  5139.     endif
  5140.  
  5141. endscan
  5142.  
  5143. Fm: Brian Bushay (TeamB) 76711,516
  5144.  
  5145.    >What else I need to do, to assure that all records are processed?, I checked
  5146.    >the data on the field, and all records are consisten in their format,
  5147.  
  5148.    If the records aren't processing then they are not consistent with the
  5149.    pattern in the Match() function.  The only other possibility is that you are
  5150.    modifying key fields and the records are moving
  5151.  
  5152. Fm: Brian Bushay (TeamB) 76711,516
  5153.  
  5154.    >Scan
  5155.    >  BadDate= [BadDOH]
  5156.    >  GoodDate = dateval (substr(BadDate,3,2) + "/" +
  5157.    >                      substr(BadDate,5,2) + "/" +
  5158.    >                      substr(BadDate,1,2)
  5159.    If GoodDate <> "Error" Then
  5160.    [GoodDOH]= GoodDate
  5161.    Else
  5162.    ;what do you want to do if conversion fails?
  5163.    Endif
  5164.    >EndScan
  5165.    >Do_It!
  5166.  
  5167. Fm: Thomas P Knox 70410,764
  5168.  
  5169.    << Scan for Match ([Emp Name], "..,.. ..",last,first,middle) >>
  5170.  
  5171.    It may be a typo in your message, but you need a space after the comma in
  5172.    the match function: Match([Emp Name],".., .. ..",last,first,middle)
  5173.                                           ^
  5174.    What you are doing is breaking up the [Emp Name] field into three chunks.
  5175.    The first one is for any text before the comma, the second is for any text
  5176.    after the first space and before the second space in the field.  The third
  5177.    chunk is for any text after the second space.  Each chunk of text is then
  5178.    assigned to a variable in the order they are listed.  The nature of the MATCH()
  5179.    function is to return TRUE if all three variables were assigned or FALSE if
  5180.    all three weren't assigned.  Two out of three is FALSE.
  5181.  
  5182.    Since you are SCAN'ing for a condition, the scan will only evaluate those
  5183.    records that the condition is TRUE.  So, some entries in the [Emp Name]
  5184.    field, while they appear at first glance to be the same, are in fact not the
  5185.    same.  Hence the MATCH() function returns FALSE and the record is "skipped".
  5186.  
  5187.    A better approach would be to SCAN all records and test the match with an IF
  5188.    statement inside the loop:
  5189.  
  5190.    TotalRecs = nrecords("answer")
  5191.  
  5192.    Scan
  5193.       Message "Working on rec.# ", RECNO(), " of ", TotalRecs
  5194.  
  5195.       if Match ([Emp Name], ".., .. ..",last,first,middle) then
  5196.          [Fname] = first
  5197.          [Lname] = last
  5198.          [Initial] = middle
  5199.       else
  5200.          <alternate processing here>
  5201.          ; perhaps put a debug here, so when the scan encounters a nonvalid
  5202.          ; entry, you can see what is not right with the value in [Emp Name]
  5203.       endif
  5204.  
  5205.    EndScan
  5206.  
  5207.    Also, notice that I removed the NRECORDS() function from the scan loop.  It
  5208.    is more efficient to assign the value to  variable befor entering a loop,
  5209.    otherwise, you force Paradox to count the records in the answer table in
  5210.    every pass through the loop.
  5211.  
  5212.    Take a closer look at the values in [Emp Name].  I think you will find some
  5213.    "ringers" in there.
  5214.  
  5215. #: 230696 S8/PAL - USING ·
  5216.     01-Jun-93  16:12:02
  5217. Sb: Import 'Too many Fields'
  5218. Fm: Frank Becker 100015,2747
  5219. To: All
  5220.  
  5221. I Need to import data into  paradox tables prior to normalising but the file
  5222. in question has too many fields.   555 to be exact. Each record in the file
  5223. (Comma Delimited with quotes) is identified by a unique File Number. I need to
  5224. break the file up into parhaps 3 differant tables before converting it into
  5225. usefull/useable data. I have thought about File reading into a memo and then
  5226. doing some kind of word search/Count/ Delimiter Count but whilst experimenting
  5227. Even the simple code:-
  5228.  
  5229. Editor Find "\"" Editor Findnext with a count seems incredibly slow. !!
  5230.  
  5231. Could any kind soul help with a routine to solve this major stumbling block.
  5232.  
  5233. Fm: Dan Bernstein (Sysop) 75300,1726
  5234.  
  5235.    You've got the right idea, but using the editor is too slow.  Try using
  5236.    SEARCHFROM() and SUBSTR() instead.  Note also that MESSAGE is slow, too; I
  5237.    recommend using MOD() to trigger MESSAGE every 10th or 25th time through the
  5238.    loop.
  5239.  
  5240. Fm: Harry Goldman (TeamB) 75300,1733
  5241.  
  5242.    Download PARSER.ZIP from the library here. It will create a 3.5 table for
  5243.    you, and will allow you to view and import the data.
  5244.  
  5245. #: 230735 S8/PAL - USING ·
  5246.     01-Jun-93  18:23:45
  5247. Sb: Table reference
  5248. Fm: Rand L Monroe 71652,1652
  5249. To: Brian Bushay/ 76711,516
  5250.  
  5251. Is there a way to make the table name in a field specifier reference a
  5252. variable. Such that table name in:  [table -> field]  could be a variable
  5253. that can be set to any table name that is desired.
  5254.  
  5255. Fm: Brian Bushay (TeamB) 76711,516
  5256.  
  5257.    No but MOVETO "Tablename" [field] should be able to give you most of
  5258.    what you want.
  5259.  
  5260. #: 230762 S8/PAL - USING ·
  5261.     01-Jun-93  20:58:57
  5262. Sb: Group Lock w/ No Detail?
  5263. Fm: David I Becker 70302,635
  5264. To: All
  5265.  
  5266. I encountered a situation which seems strange to me.  When attempting to
  5267. replace the key in a record, which is the master in a master/detail form, I
  5268. got a "Group Lock on Detail".  Another user had a lock on a record in the
  5269. detail table, but that detail record was NOT linked to the master I was
  5270. co-editing.  Further exploration showed that if the master has NO associated
  5271. records in the detail table, it is subject to the group lock when ANY record
  5272. in the detail is locked.  If the master DOES have one or more associated
  5273. detail records, then locking detail records associated with OTHER masters does
  5274. not affect it - as I would expect.  Why should a master record with NO
  5275. ASSOCIATED DETAILS be locked because some UNRELATED DETAIL record is locked?
  5276. What's the deal here?  Is this WAD or bug?
  5277.  
  5278. Fm: Brian Bushay (TeamB) 76711,516
  5279.  
  5280.    You get a Group lock when you change the key of an existing record.
  5281.    A Group Lock will prevent other users from being able to modify any of
  5282.    the detail records that belong to that master record.
  5283.  
  5284. Fm: David I Becker 70302,635
  5285.  
  5286.    I just became aware of 4.02 a couple of days ago and haven't gotten hold
  5287.    of Borland Customer Service yet.  I found the problem to exist with zero
  5288.    traffic (at least zero Paradox traffic) and it was easily duplicated
  5289.    with any two users in interactive mode.  It feels to me like something
  5290.    that is consistent and not really a "bug" per se, but more in the nature
  5291.    of a design error.  DB
  5292.  
  5293. Fm: David I Becker 70302,635
  5294. To: Brian Bushay (TeamB) 76711,516
  5295.  
  5296.    I understand that and the need for it.  My concern is with the reverse
  5297.    situation.  A lock on a detail record locks the key of the master.  That
  5298.    is still no problem.  But I also find that if the master has no
  5299.    existing detail records, then a lock on ANY record in the detail table
  5300.    locks the key of the master record that has no details.  This makes no
  5301.    sense to me.  DB
  5302.  
  5303. Fm: David I Becker 70302,635
  5304. To: DAVID R FAULKNER 76116,3513 (X)
  5305.  
  5306.    I only tested it in the environment where I discovered it, at a client
  5307.    site.  I don't know how I could go about testing multiuser locking not a
  5308.    network.  Is that possible?  I will retest it tommorrow on another
  5309.    network, but I am quite confident the problem is duplicatable.  Anyway,
  5310.    I had no difficulty duplicating the event at the time.  I tried it with
  5311.    two different master/detail forms, on two different master/detail pairs
  5312.    of tables.  It occurs every time, as described:  User A is on a master
  5313.    record that has no associated details, User B locks a detail of ANY
  5314.    OTHER master record.  When A attempts to modify the key of his record -
  5315.    boom - "Group Lock on Detail by UserB".  I got around my problem because
  5316.    I didn't really need to change the key, I was just trying to use
  5317.    copyfromarray to restore the original data.  I recoded to restoring the
  5318.    data field by field and avoided the problem by not messing with the key.
  5319.    Of course the program is now slower and UGLY.  I hope someone can at
  5320.    least explain the reason for this problem, so I can get on with my life.
  5321.  
  5322. Fm: DAVID R FAULKNER 76116,3513
  5323. To: David I Becker 70302,635
  5324.  
  5325.    Great, I'm not losing my mind.  I followed you instructions and sure
  5326.    enough I got the bogus group lock message.  THIS IS A FULL FLEDGED BUG
  5327.    in my book!  The work around that we had to teach our client was that if
  5328.    it happens, just insert a bogus detail before changing the masters key.
  5329.    I have not tried this in 4.02 yet. DrF
  5330.  
  5331. Fm: David I Becker 70302,635
  5332. To: Dan Bernstein (Sysop) 75300,1726
  5333.  
  5334.    Correct - but not in table view - we are talking about master/detail
  5335.    related tables created through forms.
  5336.  
  5337. #: 231098 S8/PAL - USING ·
  5338.     03-Jun-93  09:11:23
  5339. Sb: PDOX Runtime & Source
  5340. Fm: Lawrence Sobilo 72730,1735
  5341. To: ALL
  5342.  
  5343. With PDOX Runtime, do I need to distribute both the .SC and .SC2 files, or can
  5344. I just distribute the .SC2 files?
  5345.  
  5346. Fm: Dan Bernstein (Sysop) 75300,1726
  5347.  
  5348.    You can distribute just the .SC files, but you can never distribute just
  5349.    the .SC2 files.  If you wish to avoid distributing source code, you'll
  5350.    need to use libraries.
  5351.  
  5352. Fm: Richard Haven (Borland) 72170,3364
  5353.  
  5354.    You can also encrypt your scripts, which also encrypts the SC2.
  5355.  
  5356.    You can send out the SC2 files if you want, but they will be recreated
  5357.    if the SC file is newer.  If the system will be installed on Read Only
  5358.    media, you _must_ send the SC2 files (and make sure they are current so
  5359.    Paradox doesn't _try_ to make new SC2's) or the system will be very slow.
  5360.  
  5361. #: 231102 S8/PAL - USING ·
  5362.     03-Jun-93  09:36:30
  5363. Sb: pdoxruntime
  5364. Fm: Prudential 72410,1343
  5365. To: all
  5366.  
  5367. When using runtime w/Windows, it takes 55 seconds for a small application to
  5368. load (4k) w/the both the app & database residing on a network drive while
  5369. PDOXRUN is located on the workstation.  When running the same from DOS, it
  5370. takes 7 seconds to load.  Our users insist on running from Windows and we need
  5371. to tweak (thru a PIF file) PDOXRUN to operate as fast as possible when
  5372. loading.  The users have Dell 386/25SX machines w/4Meg of memory and DCA token
  5373. ring cards.  Any help will be deeply appreciated.
  5374.  
  5375. Fm: Dan Bernstein (Sysop) 75300,1726
  5376.  
  5377.    First of all, make sure that the private directory is on the local drive.
  5378.    Next, we recommend that you give Paradox at least 4MB of RAM, so you'll need
  5379.    to upgrade those machines to 6 or 8MB, and change the .PIF file command-line
  5380.    to -EXTK 4096.
  5381.  
  5382.    For more information on running Paradox on a network, check out Section 10.
  5383.  
  5384. Fm: Dickford Cohn 76226,1572
  5385.  
  5386.    I presume you're talking about Runtime ver 4.xx here...in that instance,
  5387.    you're probably pushing the limits of your 4Mb RAM.  In order to run PDOX4.xx
  5388.    under Windoze, it is advisable to have at least 6Mb of RAM.  One of the
  5389.    parameters you might consider tweaking is -CODEPOOL on the PDOX command line.
  5390.    The higher the setting you can get away with, the better, up to a maximum of
  5391.    -CODEPOOL 1167.  This will measurably speed up your app...but you probably
  5392.    can't get that high with only 4Mb...you might start with -CODEPOOL 500 and
  5393.    inch your way up to see how far you can get before PDOX bombs on you. If
  5394.    you're running DOS's SMARTDRV, be sure to limit it to 256k (i.e. SMARTDRV 256
  5395.    256) or eliminate it entirely to gain extra room.  Hope this helps...
  5396.  
  5397. #: 231135 S8/PAL - USING ·
  5398.     03-Jun-93  11:54:40
  5399. Sb: edit and print a record
  5400. Fm: patrice spencer 72360,1027
  5401. To: sysop (X)
  5402.  
  5403. I have a table that I would like my users to be able to edit but not add any
  5404. new information.  Can you tell me the best way to program not allowing them to
  5405. move beyond the end of the table.
  5406.  
  5407. Also, could you tell me the best way for me to allow users to print for one
  5408. record in my report form? [A I would appreciate any help you could give me.
  5409.  
  5410. Fm: Dan Bernstein (Sysop) 75300,1726
  5411.  
  5412.    > I have a table that I would like my users to be able to edit but not
  5413.       add > any new information.  Can you tell me the best way to program
  5414.    not allowing > them to move beyond the end of the table.
  5415.  
  5416.    IMAGERIGHTS UPDATE is probably the easiest mechanism, but it doesn't let
  5417.     your users modify the key fields.
  5418.  
  5419.    > Also, could you tell me the best way for me to allow users to print for
  5420.    > one record in my report form?
  5421.  
  5422.    I'd suggest doing a DO_IT! to get out of CoEdit, then
  5423.  
  5424.      COPYTOARRAY x
  5425.      CREATE "Answer" LIKE TABLE()
  5426.      COPYREPORT TABLE() 1 "Answer" 1
  5427.      COEDIT "Answer"
  5428.      COPYFROMARRAY x
  5429.      DO_IT!
  5430.      REPORT "Answer" 1
  5431.      CLEARIMAGE
  5432.  
  5433. #: 231267 S8/PAL - USING ·
  5434.     03-Jun-93  23:45:31
  5435. Sb: #231084-Thanks to all!
  5436. Fm: joseph stoyack 71610,232
  5437. To: Chris Read 100014,2273 (X)
  5438.  
  5439.   I have been a stock market investor for a long time, using Dow Jones to get
  5440. my quotes.  I also use Procomm as the comm package. I had been manually
  5441. writing scripts for Procomm to log on and get the quotes to a file.
  5442.  
  5443.   Needless to say, that's a lot of work.  So I had been automating the process
  5444. with PDOX.  Any number of lists of stocks are maintained, of course, in
  5445. tables.  I wrote some PAL to create a script file for Procomm using the list
  5446. of stocks.
  5447.  
  5448.   Then I wrote a SHOWPULLDOWN and associated menu items to create new lists,
  5449. open old ones, add two lists together, subtract one from another, empty,
  5450. delete, sort, etc.  Also use a bunch of dialog boxes to prompt for input and
  5451. set all the intercommunication defaults with Procomm and the stock charting
  5452. program called MegaTech, which will automatically convert the downloaded data
  5453. into the right format for the charting program.
  5454.  
  5455.   I announced the program's availability last Saturday on (ahem) Prodigy, and
  5456. two days before the program was finally completed (semi-vaporware).
  5457.  
  5458.   So far 22 people have ordered the program, not too bad for under a week and
  5459. such limited advertizing!
  5460.  
  5461.   The program may not sound like much, but the ease of turning something I
  5462. found useful into a marketable item using PDOX (not to mention also the fun in
  5463. doing the programming) really has me on a "high" right now.  I'm already
  5464. adding retrieval of company news, user selectable baud rates, options,
  5465. futures,....
  5466.  
  5467.      So I must count myself in the ranks of a very satisfied PDOX user.
  5468.      Now that other program that I'm also writing.....
  5469.  
  5470. #: 231269 S8/PAL - USING ·
  5471.     03-Jun-93  23:55:53
  5472. Sb: PAL Coder Needed NJ/NYC
  5473. Fm: Karl Thompson 72366,306
  5474. To: All
  5475.  
  5476. We are a PARADOX development firm and not a body shop. We presently need an
  5477. individual who can help us service the needs of our many accounts. (Mom & Pop
  5478. to Fortune 100). We are presently offering 1099 employment to the individual
  5479. who can demonstrate superior PAL knowledge and can devote a minimum of 20
  5480. hours a week to meeting our needs.
  5481.  
  5482. After a 3 month evaluation period, we are prepared to offer full time W2
  5483. employment with benefits package.
  5484.  
  5485. Please reply via CIS mail.
  5486.  
  5487. Offices in NYC and Trenton area.
  5488.  
  5489. #: 231567 S8/PAL - USING ·
  5490.     05-Jun-93  15:27:27
  5491. Sb: Menu-Driven Backups
  5492. Fm: ROBERT E. BARBER 75720,162
  5493. To: Anyone
  5494.  
  5495. Perhaps someone can save me some time.  I want to create a procedure that will
  5496. make it easy for the end user to backup files.  The procedure should do the
  5497. following:
  5498.  
  5499. -ask user which files to backup, all, one, certain types, etc.
  5500. -tell user how many floppies will be needed (D.D. H.D., etc.) before
  5501. beginning backup
  5502. -perhaps even allow user to format floppies without manually exiting (I  can
  5503. prob handle that ok, but any info will be graciously accepted))
  5504. -tell user when to insert new disk
  5505. -perhaps use pkzip to compress files
  5506. -restore utility, all,one, certain types, etc.
  5507.  
  5508. There is probably someone out there who has done this already that can tell me
  5509. the ins & outs and save me the time of experimenting.  Any info is greatly
  5510. appreciated.
  5511.  
  5512. #: 229896 S8/PAL - USING ·
  5513.     26-May-93  14:55:54
  5514. Sb: Distributing App Updates
  5515. Fm: Les Gainous 72731,146
  5516. To: All
  5517.  
  5518. I have distributed an application with runtime (v4.02) and would like to know
  5519. how I should go about sending my application updates via diskette to each
  5520. client.  I would like the user to be able to take the diskette, choose (from
  5521. my menu) "Upgrade", and have a script take control to update my application.
  5522.  
  5523. An upgrade could consist of any or all of the following processes
  5524. (non-exhaustive):
  5525.  
  5526. o new or modified scripts (including the upgrade script)
  5527.  
  5528. o addition (of deletion) of fields -> Restructure
  5529.  
  5530. o changing data in an existing field
  5531.  
  5532. o new table(s)
  5533.  
  5534. Is there a script available (shareware or commercial) that will allow this
  5535. type of operation?
  5536.  
  5537. Fm: Norman Cavender 70523,463
  5538.  
  5539.    I do a good bit of updating via floppies sent to our remote offices.
  5540.    Here is a simple method that works well if you know the location of the
  5541.    program and app directories on the target computers:
  5542.  
  5543.    Put an Update.sc on your floppy that does whatever you want: adding new
  5544.    tables, copying revised family members, modifying data, etc.
  5545.  
  5546.    Put a DOS batch file (Update.bat) on the floppy to invoke Runtime using
  5547.    your update script as a command-line switch.  For example, your batch
  5548.    file might be this:
  5549.  
  5550.    CD PDOXRUN
  5551.    PDOXRUN A:UPDATE
  5552.    CD\
  5553.  
  5554.    You simply instruct the users to type A:UPDATE at the DOS prompt.
  5555.    Runtime is invoked and it performs the steps you defined in the
  5556.    update script.
  5557.  
  5558. Fm: Brian Bushay (TeamB) 76711,516
  5559. To: Wayne Schulz 75410,2434 (X)
  5560.  
  5561.    >What about restructuring the table with the SS# as key, and then
  5562.     letting all >the duplicates pop out automatically? -- assuming the SS#
  5563.     has been assigned to >every field...
  5564.  
  5565.    tHat will work
  5566.  
  5567. Fm: Thomas P Knox 70410,764
  5568.  
  5569.    I have been using the same approach as Norman suggested to you.  One
  5570.    other thing to keep in mind (this just surfaced for me recently) is to
  5571.    verify, or account for, all the updates.
  5572.  
  5573.    In my case, after about the third update disk went out, some sites had
  5574.    not done update #2.  Since each update was expecting a current system,
  5575.    latter updates may croak because expected files weren't there.  I'm not
  5576.    sure yet just how I'll deal with it yet.  One thought I have is that any
  5577.    update should give you a current system, regardless of the previous
  5578.    updates.  Another thought is to use a control file, and if it isn't
  5579.    current, tell the user their system is not current and then <take some
  5580.    action>.
  5581.  
  5582.    FWIW, some other things I have found useful:
  5583.  
  5584.    1. You can never have too much error checking, or checking for the
  5585.       existence of expected files in your update script and/or batch file.
  5586.  
  5587.    2. I added a menu choice of "Make a Disk for the Programmer".  This will
  5588.       zip up the pertinent files (data files, errorlog file, etc) and put
  5589.       it on a disk they can send to me for trouble shooting.
  5590.  
  5591.    3. Since this app is runtime, I added another menu choice (password
  5592.       protected) to "View All Tables".  It does a wait on a table that
  5593.       contains the name of all the tables in the system.  This is for me if
  5594.       I'm on site and there is no full Paradox, I can roam around the
  5595.       system (and edit) and look for the source of some problems.
  5596.  
  5597.    4. A menu choice for "Rebuild System Tables".  This will fix just about
  5598.       any corruption problem they might encounter.  It does an ascii export
  5599.       of data import into newly created table, and copies the family from a
  5600.       "clean" system directory (stores empty tables with family for whole
  5601.       system).  This way the user can clean up there mess if they like to
  5602.       farkle the system with abnormal exits.
  5603.  
  5604. Fm: Norman Cavender 70523,463
  5605. To: Thomas P Knox 70410,764
  5606.  
  5607.    > In my case, after about the third update disk went out, some sites had 
  5608.    > not done update 2.
  5609.  
  5610.    That is a point everyone doing remote updates must keep in mind.  I use a
  5611.    minimalist solution, but it has served satisfactorily.
  5612.  
  5613.    Each app contains an Update table that logs the update number.  The 
  5614.    install proc checks this table and presents a message if necessary:
  5615.  
  5616.    "You have not installed Update 2.  Must do so before running this 
  5617.    Update." "This Update has already been installed" Etc.
  5618.  
  5619.    > Rebuild System Tables ... does an ascii export into newly created 
  5620.    > table, and copies the famil from a "clean" system directory...
  5621.  
  5622.    Like you, I depend on this as a standard fix users can run whenever an
  5623.    abnormal exit is flagged.  It has worked very well.  I cannot recall an
  5624.    incident that still required Tutility (but it might happen tomorrow).
  5625.  
  5626.    I have found that the other approach sometimes recommended (Checkplus 
  5627.    Query) is not as reliable.  I have seen two corrupted tables where 
  5628.    Checkplus went into an endless loop.  The ASCII export succeeded on both 
  5629.    of them.
  5630.  
  5631. #: 231420 S8/PAL - USING ·
  5632.     04-Jun-93  18:04:16
  5633. Sb: Ad hoc Reports
  5634. Fm: Don Wood 71024,537
  5635. To: Sysop (X)
  5636.  
  5637. I'm having a terrible time trying to find an add-in product to solve a need; a
  5638. need which i would assume many developers have.  I want users of my
  5639. application to be able to slect a menu choice and create their own reports
  5640. without giving them the passwords to the tables.  There was a product for
  5641. Paradox 3.5 called Adhoc Q&R by Infogence but they (Inforgence) have decided
  5642. to abandon upgrading it to work in 4.0.  I have looked at Nimbus and R&R
  5643. Report Writer but both would require the user to exit my application, start
  5644. the report writer and they would have to know the passwords to the tables!
  5645. Surely someone has encountered this same problem and has a solution!  Please
  5646. share it with me.
  5647.  
  5648. Fm: David J Murphey (Sysop) 76117,1032
  5649.  
  5650.    I don't see how any other product could work with a password protected
  5651.    Paradox table.  The file is encrypted.  What level of password 
  5652.    protection are you looking for.  You can put an auxilliary password on 
  5653.    a table that will only work within your app thats allows report 
  5654.    definition.  Users would not be able to use that password to get at the 
  5655.    data from an interactive mode.
  5656.  
  5657. Fm: Dan Bernstein (Sysop) 75300,1726
  5658.  
  5659.    In order to allow your users to modify a report, you need to do something
  5660.    like the following:
  5661.  
  5662.      PASSWORD "x"
  5663.      {Report}{Change} SELECT TabName SELECT RptNo
  5664.      ECHO NORMAL
  5665.      WHILE SYSMODE() = "Report"
  5666.        GETEVENT TO x
  5667.        EXECEVENT FROM x
  5668.      ENDWHILE
  5669.  
  5670. Fm: Don Wood 71024,537
  5671. To: Dan Bernstein (Sysop) 75300,1726 (X)
  5672.  
  5673.    Its not that i want them to be able to modify an existing report.  I
  5674.    want them to be able to create their own new queries and reports.
  5675.  
  5676. Fm: Dan Ehrmann (TeamB) 70007,4644
  5677.  
  5678.    You might try code such as the following:
  5679.  
  5680.          password "XXXXX"
  5681.          menu {Reports} {Change}
  5682.             select "Table"
  5683.             select "R#"
  5684.             {Custom user-defined report}
  5685.  
  5686.          echo normal
  5687.          while (true)
  5688.             retval = getchar()
  5689.             if retval = -60 then
  5690.                do_it!
  5691.                quitloop
  5692.             else
  5693.                keypress retval
  5694.             endif
  5695.          endwhile
  5696.          menu {Tools} {More} {Protect} {ClearPasswords}
  5697.  
  5698.  
  5699.    There are probably a couple of things I have forgotten, but this should get
  5700.    you started.  Note that this code will not work as intended in Paradox
  5701.    Runtime, since Borland changes the screen to black if you enter the report
  5702.    editor under script control.  The code works, you just cannot see anything!
  5703.  
  5704. Fm: P. Richard Wolfe 76424,136
  5705.  
  5706.       Dan's answer is about the best you can do.  But you CAN'T use Runtime,
  5707.       because you won't be able to let the user see the report designer (we've
  5708.       got the same problem).
  5709.  
  5710.       Virginia Sauer [72607,3335] had an adhoc query and report system that
  5711.       worked under 3.5.  You may want to whistle her up and see if she's got a
  5712.       version that works in 4.0.
  5713.  
  5714. #: 229271 S9/UI/Wait/Dialogs ·
  5715.     23-May-93  22:26:30
  5716. Sb: checkbox on the fly
  5717. Fm: Mike Downey (CHC) 70404,2657
  5718. To: Dan Behar 70761,1404
  5719.  
  5720. > Hi: I would like to know if it is possible to create a dialog box with
  5721. > multicolumn checkboxes on the fly.
  5722.  
  5723. You could write the code for the dialog box to a script file on the fly and
  5724. then play the script.  I don't know how the execution speed would be.  Maybe
  5725. that's not critical though.
  5726.  
  5727. Otherwise, what I've done is create a dialog box with the maximum number of
  5728. of checkboxes that will fit and then use an array for the values of the
  5729. labels.  Mark the extra ones as "Unused" or something else like that.
  5730.  
  5731. #: 229302 S9/UI/Wait/Dialogs ·
  5732.     24-May-93  03:01:20
  5733. Sb: INS and POSTRECORD
  5734. Fm: Kevin Ekeland 71722,1534
  5735. To: ALL
  5736.  
  5737. I have set up a wait table with an event proc.  In the event proc I am
  5738. trapping for the POSTRECORD trigger and the INS key or a MENUTAG that will
  5739. cause an insert, along with other events.  In stepping through the event proc
  5740. I have noticed the following:  Leaving the current record untouched, I hit
  5741. INS.  The code attaced to the INS key fires.  This code generated a new
  5742. pri-key value then inserts a new record.  After this sequence finishes, the
  5743. code attached the POSTRECORD event fires.  Why does this happen?  As I said, I
  5744. left the original record untouched, therefore it did need to post that record.
  5745. I have read that an insert causes a post, but I thought is was on the record
  5746. you would be leaving, and then only if that record had been changed.  Why
  5747. would it post the new record before I try to leave it?  I get the message
  5748. 'Posted new record XXX' when I am brought back into the wait.  I am doing some
  5749. integrity checks in the POSTRECORD routine (such as testing for a blank
  5750. record) and I have to set a flag in the insert routing and check it in the
  5751. postrecord routine to get past this.  Are others running in to this?  Is there
  5752. a better way around this?  What am I not seeing?
  5753.  
  5754. Fm: David Orriss Jr (Sysop) 75300,1414
  5755.  
  5756.    Have you tried a RETURN 1 in your code for the INS keypress?
  5757.  
  5758. #: 229358 S9/UI/Wait/Dialogs ·
  5759.     24-May-93  11:55:44
  5760. Sb: How keep lookup val
  5761. Fm: Bob Foster 72150,1050
  5762. To: All
  5763.  
  5764. I have a dialog box where I trap for <enter> key (eventval["keycode"]=13.
  5765. Then I do some processing.  At this point I tried to change  the keycode to
  5766. a 9 to make it a tab and process normally.  It didn't take so I use
  5767. refreshcontrol("mytag") and then selectcontrol "nextfield".
  5768.  
  5769. It works except <g> it bypasses the lookup table valcheck.
  5770.  
  5771. Fm: Brian Bushay (TeamB) 76711,516
  5772.  
  5773.    >I have a dialog box where I trap for <enter> key (eventval["keycode"]=13.
  5774.    >Then I do some processing.  At this point I tried to change  the keycode to
  5775.    >a 9 to make it a tab and process normally.
  5776.  
  5777.    You need to release the ScanCode which takes priority over the Keycode.
  5778.    Then return true.
  5779.  
  5780. #: 229480 S9/UI/Wait/Dialogs ·
  5781.     24-May-93  18:47:27
  5782. Sb: graph procs
  5783. Fm: David Altshuler 72603,2562
  5784. To: all
  5785.  
  5786. I am looking for a graphics proc which will allow me to pass graph attributes
  5787. as variables.  Commercial add-in, shareware, all ok.
  5788.  
  5789. Fm: David Orriss Jr (Sysop) 75300,1414
  5790.  
  5791.    You might want to look ask in Section 13 -Addins for such a utility.  I
  5792.    know that Command Center from Ensemble has such a capability, but it's an
  5793.    entire application development system, not just one routine.
  5794.  
  5795. #: 229522 S9/UI/Wait/Dialogs ·
  5796.     24-May-93  22:34:49
  5797. Sb: Message in DialogProc
  5798. Fm: Nancy A. Peterson 72143,2632
  5799. To: sysop (X)
  5800.  
  5801. In my dialogproc, my eventlist includes MOUSE and MESSAGE.  When I click on a
  5802. menu item, my eventvalue TYPE is MOUSE, not MESSAGE (I want it to be
  5803. message!).
  5804.  
  5805. However, in a waitproc with the same scenario as above, the TYPE is MESSAGE.
  5806.  
  5807. Fm: Harry Goldman (TeamB) 75300,1733
  5808.  
  5809.    Are you trapping MOUSE DOWN in both the Dialog proc and the Wait Proc? A
  5810.    Mouse down will happen before a message, because it is the mouse down that
  5811.    causes the message. Either trap for mouse down and in this case ignore it,
  5812.    or don't trap for mouse down. BUT be consistant in both procs.
  5813.  
  5814. Fm: Nancy A. Peterson 72143,2632
  5815.  
  5816.    In both procedures I'm trapping for mouse down.  And in the Wait Proc, the
  5817.    event type is MESSAGE when mouse clicked on menu, not MOUSE, which is how I
  5818.    want it to behave.
  5819.  
  5820.    Now, to get around the dialog proc, I've trapped for key F10, which runs a
  5821.    while loop and gets the menu selection using GETMENUSELECTION command -- works
  5822.    fine .  Now I need to trap for a mouse click on the menu.  Advise on how I can
  5823.    do this?
  5824.  
  5825. Fm: Harry Goldman (TeamB) 75300,1733
  5826.  
  5827.    In the Wait Proc you have three parameters set by PDOX:
  5828.  
  5829.    Type, Event, Cycle
  5830.  
  5831.    Where Event is a dynamic array.
  5832.  
  5833.    Look at the element Event["Type"], is it a mouse click ? If so you can look
  5834.    for that.
  5835.  
  5836.    The same holds for a Dialog box.
  5837.  
  5838. #: 229606 S9/UI/Wait/Dialogs ·
  5839.     25-May-93  09:44:12
  5840. Sb: Accept $
  5841. Fm: Steve Zilora 71510,1007
  5842. To: all
  5843.  
  5844.   Is there anyway to have dollar signs and commas appear in an Accept field of
  5845. a dialog box?  I have specified the field type to be $ so it does add the
  5846. decimal and the cents, but I'd also like commas and leading $.  Thanks.
  5847.  
  5848. Fm: David Orriss Jr (Sysop) 75300,1414
  5849.  
  5850.    The only way to display $ format is in output objects(reports and ?? or ?
  5851.    statements).  Hope this helps.
  5852.  
  5853. Fm: Steve Zilora 71510,1007
  5854.  
  5855.    That's what I was afraid of. Oh well...
  5856.    On a somewhat related note, is there anyway to change the color of the
  5857.    entire accept box that has focus? Ie, I want normal color to be wt on
  5858.    blue and selected color to be reverse. Using the index for select
  5859.    type-in box (1050) only changes the text, not the whole field.  I want
  5860.    it to be real clear what field the user is in at the time.  Thanks.
  5861.  
  5862. Fm: Brian Bushay (TeamB) 76711,516
  5863.  
  5864.    > Is there anyway to have dollar signs and commas appear in an Accept
  5865.    field of >a dialog box?
  5866.  
  5867.    No not with a $ or N type field
  5868.  
  5869. Fm: Michael Radulescu 71561,3647
  5870.  
  5871.    What if you paint "$" and color it in the accept line color..? (didn't
  5872.    try it...) Use PaintPal <smile>
  5873.  
  5874. Fm: Steve Zilora 71510,1007
  5875. To: Michael Radulescu 71561,3647 (X)
  5876.  
  5877.    Yes, I could just "paint" the $ on the box (in some color), but the
  5878.    client had asked for commas as well.  Doesn't look like that's going
  5879.    to happen.
  5880.  
  5881.    Still hoping for an answer to my other question: what index (if any)
  5882.    controls the color of the _entire_ type-in box when it is selected?
  5883.  
  5884. #: 230726 S9/UI/Wait/Dialogs ·
  5885.     01-Jun-93  17:55:05
  5886. Sb: Pulldown with Dialog
  5887. Fm: Herb Ray/Wash.Sqr.Sftwr. 72500,1736
  5888. To: ALL
  5889.  
  5890. Consider the sequence
  5891.  
  5892.        {TOOLS} {COPY} {TABLE} {Table_1} {Table_2}
  5893.  
  5894. The appearance of this sequence is that of a SHOWPULLDOWN which leads to a
  5895. SHOWDIALOG which, in turn, leads to a final SHOWDIALOG.
  5896.  
  5897. If we press <Esc> in the first dialog box, we will back up the menu sequence
  5898. and land in the second SUBMENU:
  5899.  
  5900.      +---------------+
  5901.      | Table         |
  5902.      | Form        > |
  5903.      | Report      > |
  5904.      | Script        |
  5905.      | JustFamily    |
  5906.      | Graph         |
  5907.      +---------------+
  5908.  
  5909. Suppose that we wanted to write PAL code which had this exact same look and
  5910. feel.  This would require that, upon returning control to the SHOWPULLDOWN, we
  5911. specify a default tag so that the user would be looking a highlight on {Table},
  5912. rather than being presented with the top level menu.  The problem is that there
  5913. is no way (that I know of) to specify a default tag.
  5914.  
  5915. As far as I can tell, Borland hasn't given us the hook into this part of
  5916. their menuing engine.  It must be able to do it, because Paradox's front end
  5917. does it routinely!
  5918.  
  5919. Have I missed the point somewhere, or do we have bit of a deficiency in PAL?
  5920.  
  5921. Fm: Brian Bushay (TeamB) 76711,516
  5922.  
  5923.    You haven't missed anything.  It is a deficiency
  5924.  
  5925. #: 231225 S9/UI/Wait/Dialogs ·
  5926.     03-Jun-93  20:48:52
  5927. Sb: #231115-Accept Colors
  5928. Fm: Steve Zilora 71510,1007
  5929. To: Dan Bernstein (Sysop) 75300,1726
  5930.  
  5931. Dan,
  5932.   Good idea about the dynarrays.  Indexing them on TagValue would work nicely.
  5933. Still seem to be a few things up in the air, but that's the fun of it <g>.
  5934.  
  5935. #: 230848 S10/Networks/Interop ·
  5936.     02-Jun-93  09:57:51
  5937. Sb: Read-Only directories?
  5938. Fm: TODD CARY 73027,3067
  5939. To: Anyone
  5940.  
  5941. Is it possible for a user with read only rights under Novell for a directory
  5942. to read Paradox tables?  It appears that the inability to write the
  5943. directory LCK file to the "read-only" directory prevents that.
  5944.  
  5945. If one had Paradox tables on a CD-ROM on the network, could one read them?
  5946.  
  5947. Fm: Brian Bushay (TeamB) 76711,516
  5948.  
  5949.    Only if there is a DirLock in that directory.  And a DirLock will
  5950.    restrict all users of that directory to Readonly
  5951.  
  5952.    Again you need a Dirlock on the Cd-Rom directory.  And I believe you also
  5953.    need 4.01 or higher.
  5954.  
  5955. Fm: TODD CARY 73027,3067
  5956. To: Brian Bushay (TeamB) 76711,516 (X)
  5957.  
  5958.    I probably was not completely clear in my question.  I want to limit some
  5959.    users to Read-only on some directories using the Novell facilities.
  5960.    However, when a user attempts to access the Paradox tables, it tries to
  5961.    place a lock file in the directory.  However, the user is Read-only, so
  5962.    Paradox cannot place or update the LCK file and the user is denied access.
  5963.  
  5964.    Correct me if I have made an error in my description of the interaction of
  5965.    Paradox and Novell.
  5966.  
  5967.    Is there a work around outside of using the encryption facilities of
  5968.    Paradox?
  5969.  
  5970. Fm: Brian Bushay (TeamB) 76711,516
  5971.  
  5972.       >Correct me if I have made an error in my description of the interaction
  5973.       of >Paradox and Novell.  That is the way they work
  5974.  
  5975.       The only way around this is to place a DirLock in your Readonly
  5976.       directory.  A DirLock is a special type of Paradox lock that makes a
  5977.       directory Readonly.  Unlike other lock files it is perminant (at least
  5978.       until you specifically remove it)
  5979.  
  5980.       {Tools}{Net}{Dirlock}
  5981.  
  5982.       A DirLock makes a directory Readonly for all users
  5983.       There is no other way to have a Readonly directory at the network level
  5984.       that Paradox will use.
  5985.  
  5986. Fm: Richard Haven (Borland) 72170,3364
  5987.  
  5988.       To add to Brian's answer: the DirLock is a Paradox gig.  It you have
  5989.       _any_ kind of Read Only media (e.g. CD-ROM), you must have a DirLock
  5990.       in each R/O directory.  It harmonizes the R/O aspect of the media by
  5991.       telling Paradox that it is, in fact, R/O.
  5992.  
  5993. Fm: Mike Downey (CHC) 70404,2657
  5994. To: TODD CARY 73027,3067
  5995.  
  5996.    > I probably was not completely clear in my question.  I want to limit some
  5997.    > users to Read-only on some directories using the Novell facilities.
  5998.  
  5999.    In summary, someone with Read/Write rights to the directory has to use
  6000.    {Tools} {Net} {Lock} {DirLock}.  I believe that no one else can be in the
  6001.    directory at the time.  If you are not on a "real" network, you'll need to
  6002.    use the -share command line parameter to lock the directory
  6003.  
  6004.    After that point, the directory rights can be set to ReadOnly via the
  6005.    network software.
  6006.  
  6007.    I'm pretty sure that you can't use the command CoEdit TableName where
  6008.    TableName is in the locked directory.  You can however, use View TableName
  6009.    then CoEditKey.  If you then try to edit the table, you'll get a message
  6010.    telling you that the table is write-protected (I think).
  6011.  
  6012. #: 228810 S13/Addins/Training ·
  6013.     20-May-93  18:28:37
  6014. Sb: PAL-Edit extra proj info
  6015. Fm: Mark Lebowitz 70712,2660
  6016. To: all
  6017.  
  6018. Is there some way to tell PAL-Edit's project manager to ignore specific tables
  6019. and scripts when defining or regenerating a project?  It's picking up on
  6020. various junk, scratch and utility scripts and tables in the work directory.
  6021.  
  6022. Fm: Dan Ehrmann (TeamB) 70007,4644
  6023.  
  6024.    Instead of regenerating the whole project at once, regen the scripts
  6025.    dictionary first.
  6026.  
  6027.    This dictionary is used for the procedures and variables dictionaries, so
  6028.    before regenerating these ones, edit the scripts dictionary and delete
  6029.    the scripts you don't want.
  6030.  
  6031.    There is no simple way to restrict the tables dictionary.  But it is so
  6032.     small and so quick that you could just ignore the extra tables.
  6033.  
  6034.    Another alternative is to put your scratch tables in one subdirectory
  6035.    below the master, and then exclude this directory from the project
  6036.    definition. (PAL - ProjManager - Define/Create)
  6037.  
  6038. #: 228841 S13/Addins/Training ·
  6039.     20-May-93  22:43:10
  6040. Sb: downloading from a M/F
  6041. Fm: Mark E. Meyer 72260,2524
  6042. To: All
  6043.  
  6044. I've been asked to look into products that aid in the "downloading" of
  6045. mainframe data.  I'm looking for products that I could execute directly from
  6046. my PAL applications.
  6047.  
  6048. Presently I'm shelling out to dos and then executing "RECEIVE" commands from a
  6049. batch file.  When the "receive" is done it returns to my SHOWMENU and the
  6050. operators select other options to further process the downloaded data on the
  6051. PC (such as Conduit).
  6052.  
  6053. Although this approach is efficient, its not very "friendly" for our operators
  6054. who do this on a nightly, weekly & monthly basis.  For one thing, there is no
  6055. error trapping or logging if a gateway goes down.
  6056.  
  6057. I'm looking for the following features..
  6058.   1) execute directly from PAL procs
  6059.   2) work with TSO receive command
  6060.   3) allow the operators to select given files from a "dialogbox" style menu
  6061.   4) notify operators if a M/F download goes bad, and/or continue with the
  6062.      rest of the files marked for download
  6063.  
  6064. Fm: Don Schubert (TeamB) 70007,4654
  6065.  
  6066.    Depending on the volume of data concerned and your firm's budget, you
  6067.    might want to talk with the Irons Group (Query 9track. Query 16track)
  6068.    folks. They have direct mainframe/pdox solutions.
  6069.  
  6070. #: 228904 S13/Addins/Training ·
  6071.     21-May-93  08:33:18
  6072. Sb: Barcode Help Needed
  6073. Fm: Dick Reuben 73767,3655
  6074. To: Sysop & Lurkers (X)
  6075.  
  6076. I have a client running an app that I wrote for him in 3.5, and he'd now
  6077. like to add the ability to export the content of an A12 field so that it can
  6078. be handled by some barcode software and reader---he's yet to decide which
  6079. ones he wants to use.
  6080.  
  6081. My guess is that he'll also want to use the barcode to access records in the
  6082. same table.
  6083.  
  6084. I know as much about barcode as I do about ICBMs.  I'd appreciate any help
  6085. that anyone can offer in the Care & Feeding Of Barcode, in terms of in what
  6086. format data should be exported and imported.
  6087.  
  6088. Fm: Michelle Kelsey (Sysop) 71333,120
  6089.  
  6090.    I've found three companies which you can contact for more information
  6091.      about barcode software.  1.  Worthington Data Solutions/ Santa Cruz,
  6092.    CA/ (800) 345-4220 or (408) 458-9938  2.  American Micro Systems/ Eules,
  6093.    TX/ (800) 648-4452 or (817) 571-9015  3.  Bear Rock Technologies/
  6094.    Diamond Springs, CA (800) 232-7625.
  6095.  
  6096.    Bear Rock's Bar Code Labeler for Windows was previewed in the March
  6097.     issue of the Paradox Informant.  This issue of the Informant also had a
  6098.     two page article which discusses Bar Codes in general.  You can get
  6099.    back issues and a subscription to the Paradox Informant by calling (916)
  6100.    686-6610.
  6101.  
  6102. #: 229059 S13/Addins/Training ·
  6103.     21-May-93  21:08:30
  6104. Sb: #228380-Installation Programs?
  6105. Fm: Tom Gifford 76662,3072
  6106. To: CHRIS BORGERS 73207,1467
  6107.  
  6108. Try PC-Install from 20/20 Software.  It is very easy to use and gives you a
  6109. very professional looking screen.  It's only $99 with unlimited distribution
  6110. license.
  6111.  
  6112. 20/20 Software is also the developer of the Nimbus Report Writer and WestLake
  6113. Imager for Paradox.  The phone number is (503) 520-0504.
  6114.  
  6115. #: 229076 S13/Addins/Training ·
  6116.     21-May-93  22:28:44
  6117. Sb: #228538-PaintPAL v2 problems
  6118. Fm: Ted Rosenberger 70313,1610
  6119. To: Alan M. Dunsmuir 100016,1251
  6120.  
  6121. Try adjusting the settings in the PaintPAL PIF file (you are using it aren't
  6122. you).  Perhaps you have a non-standard system font installed and that's why
  6123. you're only seeing 23 lines.  It works fine on every machine we've tested.
  6124.  
  6125. I have no idea why your mouse doesn't work.  Are you using the latest MS mouse
  6126. drivers (8.20 I believe)?  Are you using a non-Microsoft mouse or perhaps a
  6127. PS/2 connection?  Sometimes these things can be problematic.  Have you tryed
  6128. running the real-mode version of PaintPAL 2.0 (PPREAL.EXE)?
  6129.  
  6130. PaintPAL 2.0 was rewritten in Borland Pascal 7.0 so there ARE some fundamental
  6131. internal changes (none of which were made by Target Software).
  6132.  
  6133. Let me know what you find out.
  6134.  
  6135. Fm: Alan M. Dunsmuir 100016,1251
  6136. To: Ted Rosenberger 70313,1610 (X)
  6137.  
  6138.    <<Try adjusting the settings in the PaintPAL PIF file (you are using it aren't
  6139.    you).>>
  6140.  
  6141.    Yes, I am. Which settings do you suggest? None seems directly associated with
  6142.    the size of window to open for the program. Since that seems changeable by the
  6143.    'Video...' option in PaintPAL's own menu, I would have thought some file of
  6144.    initial conditions or configuration ought to be what I'm lloking for to
  6145.    change. But there doesn't seem to be one.
  6146.  
  6147.    <<Are you using the latest MS mouse drivers (8.20 I believe)?  Are you using a
  6148.    non-Microsoft mouse or perhaps a PS/2 connection?>>
  6149.  
  6150.    I'm using a non-Microsoft (but "Microsoft-compatible") serially-connected
  6151.    mouse, which works with every other mouse-supporting program on my system
  6152.    (including Paradox 4 and PaintPAL v1). Do you have any information from
  6153.    Borland about limitations in their Pascal/mouse compatibilities?
  6154.  
  6155.    The precise symptom is that, when PaintPAL is windowed I see a Windows-type
  6156.    arrow cursor which works everywhere but inside the PaintPAL window. When I
  6157.    "full-screen" PaintPAL I don't get the "block" mouse cursor that I have in
  6158.    Paradox 4 and had in PaintPAL v1.
  6159.  
  6160.    I'll try running PPREAL.EXE on my home machine and let you know what happens.
  6161.  
  6162. Fm: Robert Hancock 74020,3446
  6163. To: Alan M. Dunsmuir 100016,1251 (X)
  6164.  
  6165.    I assume from this last message that you are running PaintPal in a DOS box
  6166.    under Windows.  Does it work for other DOS applications run in a window?
  6167.  
  6168.    In SYSTEM.INI what is your setting for "MouseInDosBox="?  If it is set to ZERO
  6169.    then when a DOS application is in a window the mouse will not function as a
  6170.    DOS mouse.  The advantage to this is that is makes it easier to cut and paste
  6171.    from DOS to window applications.  (i.e., highlight information in the DOS box
  6172.    and press ENTER and it is copied to the clipboard.)  If you set it to 1, it
  6173.    should function like a DOS mouse for that application within the boundaries of
  6174.    the window.
  6175.  
  6176. Fm: Alan M. Dunsmuir 100016,1251
  6177. To: Robert Hancock 74020,3446 (X)
  6178.  
  6179.    Thanks for the tip, Robert. I'll check when I get home to see what it's set to
  6180.    on my home machine. I've just checked in the office and there's no entry in my
  6181.    SYSTEM.INI here for "MouseInDosBox" at all.
  6182.  
  6183.    <<Does it work for other DOS applications run in a window?>>
  6184.  
  6185.    Yes - the irritating thing is that Paradox 4 works perfectly. (And I rather
  6186.    think PaintPAL v1 did too, but I overwrote it when I installed v2.)
  6187.  
  6188.    But see my today's response to Ted. PPREAL.EXE works fine in full screen mode
  6189.    on my home machine, so I'll stick to that. (Unless I can get it to work with
  6190.    "MouseInDosBox" <g>.)
  6191.  
  6192. Fm: Don Schubert (TeamB) 70007,4654
  6193. To: Ted Rosenberger 70313,1610 (X)
  6194.  
  6195.    No prob with PPREAL. Am using QEMM6.02. Machine is a T3300sl/25 with 8mb RAM.
  6196.  
  6197.    Happens when you shell from Pdox and bring PaintPAL up. Seems like the TAB key
  6198.    isn't getting trapped in that instance. When you do it in PPREAL, nothing
  6199.    happens or there may be a beep (I forget which). Did you try it on your
  6200.    machine?
  6201.  
  6202. Fm: Alan M. Dunsmuir 100016,1251
  6203. To: Ted Rosenberger 70313,1610 (X)
  6204.  
  6205.    Ted - here's the information from my home machine. At least I've got a way out
  6206.    of the problem, but the question remains why the problem ever arose in the
  6207.    first place.
  6208.  
  6209.    Machine: 8Mb 486/33 with AMI-BIOS, SVGA screen and a LongShine serial mouse
  6210.    (running in Microsoft emulation mode); MS-DOS 5 and Windows 3.1
  6211.  
  6212.    Running PAINTPAL.EXE directly from within Windows was identical to running
  6213.    from the PIF. The program started up in a rather small window and had no mouse
  6214.    functionality within the bounds of that window. (Its Control Bar, and Min/Max
  6215.    buttons, worked as expected by mouse.) Switching to full screen (by pressing
  6216.    Alt-Enter) provided no mouse functionality.
  6217.  
  6218.    In contrast, PPREAL.EXE started in full-screen mode within Windows, and HAD
  6219.    mouse functionality. This was lost when windowised (by pressing Alt-Enter),
  6220.    but regained when returned to full screen.
  6221.  
  6222.    Outside Windows, when started directly from the native DOS prompt, both
  6223.    PAINTPAL.EXE and PPREAL.EXE displayed full mouse functionality.
  6224.  
  6225.    I would suggest that this problem of lack of mouse functionality in Windows,
  6226.    when running in a Window, and when using the expanded memory version, (a
  6227.    problem NOT shared, by the way, with Paradox 4) is most likely to be a Borland
  6228.    Pascal problem.
  6229.  
  6230.    Since I am committed to running everything within Windows, I will use PaintPAL
  6231.    v2 on my home machine by running PPREAL.EXE in full screen mode. Can you tell
  6232.    me what functionality I am likely to be losing by running in this mode rather
  6233.    than with the full, virtual memory, PaintPAL?
  6234.  
  6235. Fm: Ted Rosenberger 70313,1610
  6236. To: Alan M. Dunsmuir 100016,1251 (X)
  6237.  
  6238.    I'll look into your problems more when I have a chance.
  6239.  
  6240.    There is no functional difference between PPREAL.EXE and PAINTPAL.EXE.
  6241.  
  6242.    PaintPAL.EXE is a little faster since it doesn't use overlays.  Also, it can
  6243.    handle monstrous dialogs and import very complex forms...  but for normal
  6244.    dialog work you won't notice any difference.
  6245.  
  6246. Fm: Bob Spencer 72357,2514
  6247. To: Alan M. Dunsmuir 100016,1251 (X)
  6248.  
  6249.    Try setting the "Detect Idle Time" Box in the advanced section of the  Paint
  6250.    Pal Pif off when trying to run with the "Windowed" option.
  6251.  
  6252. Fm: Alan M. Dunsmuir 100016,1251
  6253. To: Bob Spencer 72357,2514 (X)
  6254.  
  6255.    <<Try setting the "Detect Idle Time" Box in the advanced section of the  Paint
  6256.    Pal Pif off>>
  6257.  
  6258.    Magic, Bob! Goodness knows why, but when I did that and then changed the video
  6259.    option from "A:" to "B:", I got a nicely filled screen on my office machine.
  6260.    I've yet to see whether that parameter (what DOES it do, exactly?) has any
  6261.    effect on the mouselessness on my home machine <g>.
  6262.  
  6263.    Now if only there was a way I could save that video selection so that it was
  6264.    "B:" when I next started, instead of reverting to option "A:"...
  6265.  
  6266. Fm: Ted Rosenberger 70313,1610
  6267. To: Alan M. Dunsmuir 100016,1251 (X)
  6268.  
  6269.    Whoever reported that PaintPAL crashes when pressing the Tab key when nothing
  6270.    is loaded in PaintPAL is right!
  6271.  
  6272.    We'll get it fixed in the upcoming maintenance release.
  6273.  
  6274. Fm: Bob Spencer 72357,2514
  6275. To: Alan M. Dunsmuir 100016,1251 (X)
  6276.  
  6277.    Another trick to try if your mouse doesn't respond is to check the
  6278.    "Background" box under "Execution" in the
  6279.    PIF, and leave "Detect Idle Time" off.  I have to do this to get PX 4.00 to
  6280.    Run under Windows on my machine.
  6281.  
  6282.    Detect Idle time is supposed to give more time to other apps when the app is
  6283.    not being used.  Frankly, I can't
  6284.    tell the difference on my machine.  See pg. 271 of the Windows User's Guide.
  6285.  
  6286. #: 229090 S13/Addins/Training ·
  6287.     22-May-93  01:56:12
  6288. Sb: #229076-PaintPAL v2 problems
  6289. Fm: Thomas P Knox 70410,764
  6290. To: Ted Rosenberger 70313,1610
  6291.  
  6292. A minor problem with 2.0.  In modifying the colors for a dialog box, the
  6293. colors showing for the dbox while the color palette was active changed
  6294. slightly when I quit modifying the colors.  I was designing a
  6295. Pickdynarrayindex and modified the highlight bar colors.  When I saved them,
  6296. they changed.  When I went back to remodify them they would change back to
  6297. what I wanted them to...save again and they switch...modify, ok...save,
  6298. switch...endless loop.
  6299.  
  6300. Same thing happened for the non-default pushbutton.
  6301.  
  6302. Fm: Ted Rosenberger 70313,1610
  6303.  
  6304.    I think I know what you're talking about and it's definately NOT a
  6305.    PaintPAL 2.0 bug.
  6306.  
  6307.    There are two different color palette entries that control the color of
  6308.     a pick list's highlight bar:
  6309.  
  6310.    "Picklist Focused" and "Picklist Selected".  "Picklist Focused"
  6311.     determines the color of the highlight bar when the picklist is the
  6312.     currently selected element on the dialog box.  "Picklist Selected"
  6313.    determines the highlight bar's color when some other element on the
  6314.    dialog box has the input focus.  When you go into Test Mode in PaintPAL,
  6315.    tab around the dialog box and you'll see that the color of the highlight
  6316.    bar changes when the picklist receives the input focus.  If you want the
  6317.    highlight bar to stay the same color all of the time, set "Picklist
  6318.    Selected" and "Picklist Focused" to the same color.
  6319.  
  6320.    The same situation applies to "PushButton Default" v.s. "PushButton
  6321.    Selected".
  6322.  
  6323. #: 229094 S13/Addins/Training ·
  6324.     22-May-93  07:32:38
  6325. Sb: WP4 HELP
  6326. Fm: Tucker Brawner 73455,1440
  6327. To:  71171,1340
  6328.  
  6329. I can setup a desktop and do simple editing under the XXsetup.sc, but can't
  6330. seem to go any further.
  6331.  
  6332. Perhaps I have not spent enough time with the manuals, but I don't find WP4
  6333. particularly intuitive.  Is there a 'simple' example somewhere that will
  6334. help me begin experimenting?  I have a fully functional 3.5 application and
  6335. bought WP4 with the hope it would smooth the transition to 4.0.  I suppose
  6336. what I really need is a listing of the steps in the development cycle.  The
  6337. closest I could find was the 2.0 to 4.0 migration chapter...but I never
  6338. used any prior WP and that chapter is Greek to me.
  6339.  
  6340. Where is the equivalent structure for my current(quite large) WAIT ...
  6341. ENDWAIT controlling loop in WP4?  I tried to run wdemoapp.sc and it crashed
  6342. looking for libname.a which I don't know where to define.  How do I link my
  6343. old WAIT(3.5) procedures to the new WP4 desktop?  I am stuck and
  6344. frustrated.
  6345.  
  6346. Fm: Don Schubert (TeamB) 70007,4654
  6347.  
  6348.    You need to start WPP4 with menuwp.sc, not wdemoapp.sc. Try working
  6349.    through the small users guide and then the examples.
  6350.  
  6351. Fm: Andrew Appell 74007,146
  6352.  
  6353.    I believe that once you become familiar with the approach to using WP4
  6354.    you will find it an extemely powerful tool.
  6355.  
  6356.    >> Is there a 'simple' example somewhere that will help me begin
  6357.    experimenting?  The 8 demo applications range from a simple tableview to
  6358.    a "kitchen sink" with multiple tableview, formview, editor and canvas
  6359.    windows.  The code which controls these is in wDemoApp.sc and will give
  6360.    you an idea at which action point to attach your code to create
  6361.    customized behavior.  The code for Demo 4, for example, will be
  6362.    indicated by  CASE demodesktop.a = "4" in the various action procedures.
  6363.  
  6364.    >> I have a fully functional 3.5 application and bought WP4 with the
  6365.    hope >> it would smooth the transition to 4.0.
  6366.  
  6367.    In order to make the most of WP4, it is important to have a basic
  6368.    understanding of the new event-driven WAIT which is quite different from
  6369.    the 3.5 WAIT .. UNTIL.  It is difficult without seeing your application
  6370.    to know what the functionality is, but odds are there is an action point
  6371.    in WaitPlus Pro to attach the various units of your code, modified to
  6372.    use the WP4 variables and return a numeric value (0 or 1 in most cases).
  6373.    In addition to the Paradox triggers, there are >20 other action points
  6374.    defined by WaitPlus (such as PrepAdd, DepartEdit, etc.) where you can
  6375.    invoke your custom code.  These are defined in Chapter 3 of the
  6376.    Programmer's Guide.
  6377.  
  6378.    >> I suppose what I really need is a listing of the steps in the >>
  6379.    development cycle.
  6380.  
  6381.    1. Create your tables and forms (a good start, I think <g>).
  6382.  
  6383.    2. Define the table rights (user editing rights) for each table in the
  6384.       app either by using the ScriptGen setup utility or manually creating
  6385.       a setup script with the table/form window definitions.  i.e.
  6386.       MySetup.l() TableRights are explained in Chapter 2.
  6387.  
  6388.    3. Make a copy of wWP4App.sc and begin adding custom behavior to the
  6389.       appropriate action points by associating a procedure with the
  6390.       corresponding wpActionProcs.y[] dynarray element.  i.e.
  6391.       wpActionProcs.y["PREPADD"] = "MyPrepAddProc.n" Compile this script
  6392.       into a library of its own and place it first in the autolib
  6393.       definition, before the WaitPlus library.  i.e.  autolib =
  6394.       "MyLib,C:\\WP40\\WP40" Call WaitPlus passing the name of your setup
  6395.       proc.  i.e.  WaitPlus4.v("MySetup.l")
  6396.  
  6397.    I hope this has been helpful to get you on the right track.  Any other
  6398.    questions can be either posted on this forum or called in to PBE.
  6399.  
  6400. Fm: Steve Erbach (NEWPALS) 70620,3432
  6401.  
  6402.    >> Perhaps I have not spent enough time with the manuals, but I don't
  6403.    find WP4 particularly intuitive. <<
  6404.  
  6405.    I am not a Borland employee; neither am I employed by PAL by Example.
  6406.    I'm just a (very) satisfied PBE customer who finds it hard to believe
  6407.    what I've just read.
  6408.  
  6409.    I own WaitPlus Pro v. 4.0.  I was absolutely thrilled with it as it
  6410.    helps me avoid the immense travail involved with constructing WAIT
  6411.    ENDWAIT controls that are complete, safe, consistent and bug-free.
  6412.  
  6413.    Paradox 4.0 does require the acquisition of some additional programming
  6414.    skills.  On page 2 of the WaitPlus Pro Programmer's Reference mention is
  6415.    made of the aspects of PAL one should be familiar and comfortable with
  6416.    before you can use WaitPlus Pro to its fullest extent:
  6417.  
  6418.    Procedures, including formal parameters and private variables PAL
  6419.    Procedure libraries AUTOLIB-the autoload library The Event Model and
  6420.    Event-Driven WAIT command
  6421.  
  6422.    I notice from your message that a WaitPlus script crashed because it
  6423.    couldn't find a library name.  That's because it is part of the suite of
  6424.    scripts that create the WaitPlus Pro libraries.  It doesn't run
  6425.    independently because it's merely a collection of procedures that are
  6426.    called by WaitPlus.
  6427.  
  6428.    I can't explain how libraries work in a short message.  You'll need to
  6429.    read up on them in the Paradox documentation.  I suggest you spend some
  6430.    time with the PAL manuals before you tackle WaitPlus Pro.
  6431.  
  6432. Fm: Steve Caple (TeamB) 76711,520 To: Steve Erbach (NEWPALS) 70620,3432
  6433.  
  6434.    I've got to say that I'd also appreciate a concise outline of steps,
  6435.    files needed, hooks to grab for various basic functions, etc., for
  6436.    developing and then shipping a runtime WPP4 app.  And I've been using
  6437.    procs and libs for years, am familiar with scoping variables, passing
  6438.    parameters, etc. (just not familiar with WPP).
  6439.  
  6440.    I really like what I've seen working with the new WPP - but a condensed,
  6441.    broad brushed outline would be nice so I didn't have to digest or tease
  6442.    it out of the docs; sort of a "Quick'n'Dirty Guide for PAL Programmers".
  6443.  
  6444.    A more comprehensive index would help, too.
  6445.  
  6446. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  6447. To: Steve Caple (TeamB) 76711,520 (X)
  6448.  
  6449.    I agree that I'd like to see a "Quick and Dirty Guide..."  perhaps I
  6450.    could twist your arm for some help with such a project.  It could be
  6451.    included with future copies of the product, or be posted on-line with
  6452.    tips and tricks.
  6453.  
  6454.    So, what I'm saying is that I'd like to take it one step beyond a simple
  6455.    pringed manual.  A dynamic collection of user solutions and issues could
  6456.    be very valuable.
  6457.  
  6458. #: 229142 S13/Addins/Training ·
  6459.     22-May-93  15:41:51
  6460. Sb: #229078-PaintPAL v2.0 Questions
  6461. Fm: Ted Rosenberger 70313,1610
  6462. To: Les Gainous 72731,146
  6463.  
  6464. There's easy solutions to both of the issues you raised!
  6465.  
  6466. Don't delete the PaintPAL_Frame_Begin and _End marker comments that PaintPAL
  6467. embeds in the generated code.  The parser uses this to reconstruct the
  6468. chiseled frames as 1 element.
  6469.  
  6470. In PaintPAL 2.0, the highlight color of chiseled frames is determined by the
  6471. color specified in the frame's setup box.  Give it a try!
  6472.  
  6473. Fm: Les Gainous 72731,146
  6474. To: Ted Rosenberger 70313,1610 (X)
  6475.  
  6476.    Now that I can import the code, I'll leave the markers in.  Before,
  6477.    (v1.0) there was really no need for me to keep them in because once I
  6478.    put the code in a script, I ended up changing the color of the hilited,
  6479.    chisled sides. This, in effect, would "sever" the link back to PPal.
  6480.  
  6481. #: 229162 S13/Addins/Training ·
  6482.     22-May-93  18:06:45
  6483. Sb: WBSLIB2 Problems
  6484. Fm: Michael D. Miller 76130,1734
  6485. To: Angelo Laudon-WBSLIB2 76467,424
  6486.  
  6487.    A few problems with WBSLib2, Version 2.06:
  6488.  
  6489.    Without the use of Opts["EditMode"] = "Table" I cannot use F3/F4 after
  6490.    going into Change F or Insert.  I can only use F3/F4 in View mode.
  6491.    Makes it very cumbersome for user to go to another form on screen during
  6492.    edit.  Paradox interactive lets you go to diff forms while in
  6493.    edit/coedit.
  6494.  
  6495.    If I use Editmode/Table and Autoadd, Autochange, I get some unusual
  6496.    results.  Multitable forms (4 forms).  When I pressed F4 from the second
  6497.    or third form, I go back to #1.  When I add a new record in Form #1 and
  6498.    press F4 in order to move to #2, the record flys away and I am in #2 of
  6499.    some other record.  If the user then begins to edit again, they will be
  6500.    in the wrong record.  Whenever the cursor returns to #1, and you press
  6501.    F4, the cursor skips over #2 and goes to #3.  I checked the order of my
  6502.    "tables" and made them the same order that the tables were imbedded.  If
  6503.    you save #1 and moveto #2 and press F9, the cursor jumps back to #1.  If
  6504.    you press F4 it skips whichever form you just tried to edit and goes to
  6505.    the next form in line. ie.  If you are on #3 and hit F9, you go to #1.
  6506.    If you press F4 to get down to #3 you skip over #3 and go to #4.
  6507.  
  6508.    One time upon exiting my submenu to my main menu, I got an Unexp Cond
  6509.    and got kicked to DOS.
  6510.  
  6511.    Can't press ALT-0 or ALT 1-4 in coedit mode (F9).
  6512.  
  6513.    Does your referential integrity just check the occurance of records in
  6514.    the form BEING USED, and not all forms that are used with that master
  6515.    that are not currently on screen?
  6516.  
  6517. #: 229198 S13/Addins/Training ·
  6518.     23-May-93  10:12:38
  6519. Sb: Blob viewing
  6520. Fm: steven brand 71051,637
  6521. To: All
  6522.  
  6523. Does anyone know of a good Blob viewer (do not need to edit the field) that
  6524. could be integrated into a recipe database that stores scanned recipes into a
  6525. Blob type field?  I would like the user to be able to look at the recipe and
  6526. print it (if this is also possible).
  6527.  
  6528. Fm: Don Schubert (TeamB) 70007,4654
  6529.  
  6530.    VPIC is available (shareware) in many LIBs here. GO IBMFF to find where.
  6531.  
  6532. Fm: Michelle Kelsey (Sysop) 71333,120
  6533. To: steven brand 71051,637 (X)
  6534.  
  6535.    > Does anyone know of a good Blob viewer (do not need to edit the field) that
  6536.    > could be integrated into a recipe database that stores scanned recipes into
  6537.    > a Blob type field?  I would like the user to be able to look at the recipe
  6538.    > and print it (if this is also possible).
  6539.  
  6540.    There are three Blob editors discussed in the September edition of the
  6541.    Paradox Informant.  dGT: Database Graphics Toolkit (708) 453-9590, WestLake
  6542.    Imager (503) 520-9918, and QuickView Plus (407) 331-1996.  You can get back
  6543.    issues of the Informant by calling (916) 686-6610.
  6544.  
  6545. Fm: Don Schubert (TeamB) 70007,4654
  6546. To: Michelle Kelsey (Sysop) 71333,120 (X)
  6547.  
  6548.    If he just needs a simple blob viewer (lik a .gif file viewer), all of these
  6549.    are overkill. They do far more - and are priced to match <g>.
  6550.  
  6551. Fm: Tom Gifford 76662,3072
  6552. To: steven brand 71051,637 (X)
  6553.  
  6554.    You can call 20/20 Software at (503) 520-0504 for a free brochure on the
  6555.    WestLake Imager.  There's a review in Databased Advisor Feb. this year. A new
  6556.    version of the WestLake Imager (2.0) was shipped last month with built-in
  6557.    zoom, pan, and many other features.
  6558.  
  6559. Fm: steven brand 71051,637
  6560. To: Tom Gifford 76662,3072
  6561.  
  6562.    Thanks very much. I'll look over the review.  I have been trying a viewer
  6563.    called TPICEM (found in PICEM.EXE).  It took me a while to figure out that I
  6564.    needed to put a "*" after the executable file name but now it seems to be
  6565.    working.
  6566.  
  6567. Fm: steven brand 71051,637
  6568. To: Don Schubert (TeamB) 70007,4654 (X)
  6569.  
  6570.    Don -  thanks very much for the suggestion.  I initially had trouble figuring
  6571.    out how to get the Blob editor to open the file automatically -- looking
  6572.    behind the "help" screen gave me the answer -- I needed the "*".
  6573.  
  6574. #: 229301 S13/Addins/Training ·
  6575.     24-May-93  02:18:14
  6576. Sb: WaitPlus Triggers
  6577. Fm: Gary M. Mugford 70274,2254
  6578. To: Alan Zenreich 71171,1340 (X)
  6579.  
  6580. I have discovered a discrepancy between the manual printed code and the
  6581. actual code in the wp4SpeedBarRapidRewind and RapidForward procedures in
  6582. the Core9 script.
  6583.  
  6584. I went hunting for the code in that area because of a problem I had with
  6585. the jump speedbar keys. I had declared a PostRecord procedure that was
  6586. being called whenever the jump keys were being called but wasn't being
  6587. called by single move keys or the database end keys. I found this unusual
  6588. and a little bit of a bother. In my case, I was calling a FILL_IN_FORM()
  6589. function that fills in a variety of fields whenever there is a change of
  6590. any sort (fill in Status, Status Date and a memo Follow_up field
  6591. automatically). This had a discerning habit of being called unintentionally
  6592. by the speedbar. I commented out the the if statement on line 767 and the
  6593. problem went away, replaced with a problem of duplicated behaviour of auto
  6594. posting when exiting the waitplus statement.  Finally, I restored
  6595. everything to snuff and moved the PostRecord auto-filling into the
  6596. OKRecord procedure. That worked.
  6597.  
  6598. So, a few questions ... What effect is gained by the if? ... Why are the
  6599. jump keys treated so much more differently then the other movement keys?
  6600. Don't all six keys result in the same thing, a LeaveRecord followed by an
  6601. ArriveRecord? It's just a matter of degree as to how far. ... At one point,
  6602. I was close to curing the individual problem by over-writing the function
  6603. keys 3 and 6 with definitions of my own. I didn't try it, but is it
  6604. possible?
  6605.  
  6606. It's been a hectic month, with the arrival of your product, Style Guide,
  6607. User's Base and some other stuff. But it's been the most productive month
  6608. of learning I've had yet. In large part, that's due to your code and the
  6609. massively commented listing. Thanks.
  6610.  
  6611. Fm: John Rendell 70474,377
  6612. To: Gary M. Mugford 70274,2254 (X)
  6613.  
  6614.    Gary - to see what is going on, enable the event tracer.  This will tell
  6615.    you what is being called and in what sequence.  The WPP event model is
  6616.    different from Paradox as far as what triggers are being called.  This
  6617.    can lead to some confusion (It took me a few hours to figgure out why
  6618.    some things were happening 'out of sequence' <G>).
  6619.  
  6620. Fm: Andrew Appell 74007,146
  6621. To: John Rendell 70474,377 (X)
  6622.  
  6623.    The WaitPlus event model is not really different from that of Paradox.
  6624.    In cases where we are explicitly creating a trigger sequence, they
  6625.    always take place in the order that they would occur if Paradox was
  6626.    generating the same triggers implicitly.
  6627.  
  6628.    There are situations where we are calling a more complete sequence than
  6629.    Paradox would normally call.  For example, consider 2 simple table views
  6630.    on the desktop.  If you start editing "Table1" and then press [F4],
  6631.    Paradox would implicitly call only DEPARTFIELD, DEPARTROW, DEPARTTABLE
  6632.    for "Table1" and ARRIVEWINDOW, ARRIVETABLE, ARRIVEROW, ARRIVEFIELD for
  6633.    "Table2", leaving the changes to "Table1" pending.  For the same
  6634.    keypress, WaitPlus will fully validate the departure from "Table1"
  6635.    calling DEPARTFIELD, DEPARTROW, DEPARTTABLE, POSTRECORD, DEPARTWINDOW (a
  6636.    WaitPlus construct - DEPARTWINDOW does not exist in Paradox) for
  6637.    "Table1" (thus leaving no changes pending) before calling ARRIVEWINDOW,
  6638.    ARRIVETABLE, ARRIVEROW, ARRIVEFIELD for "Table2".
  6639.  
  6640.    As you have said, the Event Display can be of tremendous help in
  6641.    learning both the new event model and WaitPlus by showing exactly the
  6642.    triggers/actions which result from each event.
  6643.  
  6644. Fm: Gary M. Mugford 70274,2254
  6645. To: Andrew Appell 74007,146 (X)
  6646.  
  6647.    Not to nag, but why the different treatment of RapidRewind to Home or
  6648.    Left Arrow? They each do the kind of things that all these triggers
  6649.    interact with, yet only RapidRewind triggers the PostRecord reflex?
  6650.  
  6651. Fm: Andrew Appell 74007,146
  6652. To: Gary M. Mugford 70274,2254 (X)
  6653.  
  6654.    >>  I have discovered a discrepancy between the manual printed code and
  6655.    the >>actual code in the wp4SpeedBarRapidRewind and RapidForward
  6656.    procedures in the >>Core9 script.
  6657.  
  6658.    Between the time the code was prepared for printing in the manuals and
  6659.    the time the master disk for duplication was created, we saw an
  6660.    opportunity to add to the functionality of the release version of WP4.
  6661.    One such new feature, mentioned in WPPRO.DOC, is the ability to call
  6662.    WP4LookupSelect.n() to do a pseudo-lookup on a formview.  To accomodate
  6663.    this, a new window type was created: LOOKUPFORM.  Code which did logical
  6664.    operations on wp.y["Window.a"] was slightly modified to allow for this
  6665.    new value.
  6666.  
  6667.    Let me add a little to the code section starting on line 767 of
  6668.    wWP4Cor9.sc:
  6669.       IF wp.y["Window.a"] = "FORM" THEN
  6670.          ; A normal formview window where editing may be done.
  6671.          n = WP4CallTriggers.n("VC,DF,DR,PR")
  6672.       ELSE      ; "LOOKUPFORM"
  6673.          ; This procedure was invoked while in a pseudo-lookup on a
  6674.          ; formview window for the "lookup" table.  No editing is allowed so
  6675.          ; there is no need to validate the field/record departure or post
  6676.          ; any records.
  6677.          n = 0
  6678.       ENDIF
  6679.  
  6680.    >>  Why are the jump keys treated so much more differently then the
  6681.    other >>movement keys? Don't all six keys result in the same thing, a
  6682.    >>LeaveRecord followed by an ArriveRecord?
  6683.  
  6684.    While all six SpeedBar movement buttons do result in a departure from
  6685.    one record and arrival on another, the technique is not the same for
  6686.    all.  A mouse click on the "Home", "Previous", "Next" and "End" SpeedBar
  6687.    buttons is converted to a KEY event with the appropriate ["KEYCODE"]
  6688.    element and thus processed by the wait proc as if the key had been
  6689.    pressed by the user.  Paradox will *implicitly* call the proper trigger
  6690.    sequence for the key which may or may not include POSTRECORD depending
  6691.    on whether the record you are leaving has been modified.
  6692.  
  6693.    There is no equivalent single key to "jump" 10 master records in
  6694.    formview (although we are able to do so, it's not practical to convert
  6695.    the button click to 10 [Ctrl PgDn] key events).  For the "FastForward"
  6696.    and "RapidRewind" buttons, we are *explicitly* calling the most complete
  6697.    departure trigger sequence that could occur which in this case includes
  6698.    POSTRECORD, doing a MOVETO RECORD <current record#> + <fast forward
  6699.    increment>, then *explicitly* calling the arrival sequence for the new
  6700.    record/field.
  6701.  
  6702.    By the sound of the nature of your Fill_In_Form() proc, it might better
  6703.    be placed in the DepartEdit or DepartAdd action points (or possibly in
  6704.    OKRecord as you have done).  The "PostRecord" action point is provided
  6705.    as a means to let you substitute your own record posting routine
  6706.    (although we recommend you let our WP4PostRecord.l() take place, as
  6707.    would happen normally).
  6708.  
  6709.    Fm: Alan Zenreich (ZS/PBE) 71171,1340
  6710.  
  6711.       The WaitPlus reference manual went to press two months before the
  6712.       finished product shipped.  We opted to update the code wherever
  6713.       necessary, so users have the most up to date code base.  Most of the
  6714.       changes are listed in the WaitPlus.Doc file.
  6715.  
  6716.       I'll let Andrew respond to some of the more delicate speedbar issues.
  6717.       SpeedBar and Zoom issues are a bit more complicated than I originally
  6718.       thought, so perhaps he can spread some light on the way it was
  6719.       finally implemented, and why.
  6720.  
  6721.       Meanwhile, the OKrecord is probably the right place for it anyway....
  6722.  
  6723. Fm: Gary M. Mugford 70274,2254
  6724. To: Alan Zenreich (ZS/PBE) 71171,1340 (X)
  6725.  
  6726.    Actually, Andrew did a good job pointing me in the right direction.
  6727.    Yeah, some things in the learning curve are a little steep for guys like
  6728.    me, but I get lost stepping outside my front door. The learning process
  6729.    is proceeding and I'm actually starting to understand the why-fors and
  6730.    the huhs? of the process.
  6731.  
  6732.    The speedbar issue is receding in the rear-view mirror and I'm
  6733.    concentrating on getting these CallTriggers down pat. Otherwise, my
  6734.    newfound knowledge on speed bars goes south.
  6735.  
  6736. #: 229483 S13/Addins/Training ·
  6737.     24-May-93  19:15:10
  6738. Sb: EventMan and MultiForms
  6739. Fm: Henrik Bechmann 72701,3717
  6740. To: george reis 70724,1324 (X)
  6741.  
  6742. >>EventMan ... use Case statements because imbedded tables are sub-objects,
  6743. etc.<<
  6744.  
  6745. >>wonder if you have considered making the *table* the basic object.<<
  6746.  
  6747. >>In 4.0, the table is in a window, but that's just a package. I am really
  6748. interested in the contents, so why not define the object as something I work
  6749. with all the time?  Comments?<<
  6750.  
  6751. I consider the window to be an attribute of the interface object between the
  6752. user and the program. The logic of getting at sub-objects, as far as I can
  6753. tell, is to query the window-level object (typically the form) as to the the
  6754. current subobject. This is not always easy, particulary when the form is not
  6755. current. Another consideration is that a table presented as an embedded form
  6756. in one window may not mean the same as a table embedded in a different form.
  6757. For instance in one form a table may be a (possibly hidden) lookup object,
  6758. whereas in another form it may be an editable object. This depends on your
  6759. design standards and levels of complexity.
  6760.  
  6761. IAC, the answer I think is to extend the .GetObjectTagAndType logic so that
  6762. the routine looks further than the window level object for the target object.
  6763. There are a few alternate ways of doing this, but to begin with you would have
  6764. to give tables object names. (This could be just the table name if it will be
  6765. unique in the object name space at any given time, or you could generate a
  6766. unique object name for each table.) Then your GetObjectTagAndType routine
  6767. would have to lookup the target object for the event based on the target
  6768. window object. You could do this by having a current object array that you
  6769. maintain during yoru program, but this is difficult in the absence of a
  6770. DepartWindow trigger. Otherwise you could have a lookup dynarray that held a
  6771. list of window level objects and their subobjects, by Paradox table name. This
  6772. is essentially the [<FormObjectName> + table()] = "SubObject" idea. Then
  6773. whenever you target an event for the window, if the window is current, you can
  6774. get the object name directly by concatenating the form name and table. If the
  6775. window is not current, you could target a default table, or if you find some
  6776. way of keeping the name of the last table on a form that was current, then you
  6777. could use that. Targeting a mouse event is more difficult, because we don't
  6778. have a tableAt() function. By convention you might want to send mouse events
  6779. to the window level object (typically a form).
  6780.  
  6781. Another complication is that in going to the subobject or component object
  6782. idea, you have introduced the notion of parent objects. This is in principle
  6783. highly desirable (PdoxWin's containership is a form of object hierarchy) but
  6784. it means tracking parent-child relationships as well as type relationships.
  6785. Not a trivial task. The object hierarchy I (currently) use is:
  6786.  
  6787.                  TABLE
  6788.                  BLOCK  (embedded form)
  6789.                  PANEL  (presentation form)
  6790.  
  6791. The search strategy for event dispatch then becomes:
  6792.  
  6793.      1. identify the target (beginning) object
  6794.      2. search its type hierachy
  6795.      3. search its object parent object
  6796.      4. continue at 2 for the parent object, iterartively, until exhausted.
  6797.      5. if not found, then do default, else fire found proc.
  6798.  
  6799. This is a form of message forwarding that encompasses ideas from the OOP
  6800. inheritance model, as well as ideas from PdoxWin's containership model.
  6801.  
  6802. Of course you don't have to make things nearly so complicated, if all you want
  6803. to do is send an event to a table and be done with it. In that case some kind
  6804. of simple lookup in the SetObjectTagAndType routine is all you would need.
  6805.  
  6806. Hope this gives you some ideas. I doubt that I will modify EventMan
  6807. significantly in the future. My DOS development work has and is going into my
  6808. more advanced application framework. If that matures soon enough to be of use,
  6809. then I would certainly consider releasing it, but the refinements are slow and
  6810. iterative, so I wouldn't expect to consider that before late fall at the
  6811. earliest.
  6812.  
  6813. -------------------
  6814.  
  6815.   >    Wait table
  6816.   >    Proc "EventMan.CatchTrigger" All
  6817.   >    EndWait
  6818.  
  6819. There is no reason I can think of why this shouldn't work: Paradox can
  6820. certainly take nested waits; this form doesn't interfere with global
  6821. variables, such as EventMan.Dictionary[]; there's nothing I can think of that
  6822. would restrict the events being captured by your wait statement. Some event
  6823. handlers have different effects under wait table, I believe (more
  6824. restrictive), but that doesn't seem to explain your problem. Can you give me
  6825. an example?
  6826.  
  6827. Fm: george reis 70724,1324
  6828. To: Henrik Bechmann 72701,3717 (X)
  6829.  
  6830.    Between your answer and Howard Bullock's, I have more than enough to play
  6831.    with!  As far as improvements in EventMan are concerned, he is certainly
  6832.    satisfying my needs just the way he is.  (Of course, any future
  6833.     contributions from you will be certainly appreciated.)
  6834.  
  6835.    As far as the imbedded "Wait workspce" problem I had--its good to know
  6836.    that you don't see anything wrong with what I was trying to do.  I
  6837.    don't have a simple example at the moment.  The next time I face the
  6838.    situation, I'll spend more time with it, and report my findings then.
  6839.  
  6840. #: 230187 S13/Addins/Training ·
  6841.     28-May-93  04:19:59
  6842. Sb: WPP4
  6843. Fm: Thomas P Knox 70410,764
  6844. To: Alan Zenreich 71171,1340 (X)
  6845.  
  6846. I would like to second (or third) the idea for a tutorial on how to set up
  6847. an application to use WaitPlus Pro.  Although the documentation has a lot
  6848. of good info about the technical side of WPP and is sufficiently clear on
  6849. how to use ScriptGen, I couldn't find anything that said what steps to
  6850. follow to incorporate WPP into an application.
  6851.  
  6852. True, you can disect the code to understand what each line of each
  6853. procedure is doing, but not the basic building blocks of building an
  6854. application.  It is somewhat like reading an Agatha Christie novel - all
  6855. the facts are there, but you have to "sleuth" them out.
  6856.  
  6857. Example:
  6858.  
  6859. I got through ScriptGen and configured a two table two form workspace which
  6860. created the table and form dynarrays and the initial call to WPP.  But I
  6861. had difficulty figuring out just where to list the keys I wanted to trap
  6862. for.  The reference to the wpSpKey.r array said it was for "special" keys,
  6863. but I just wanted to trap for the "usual" keys of F2, F3, etc.  Without
  6864. skimming the code I didn't know what keys WPP was already trapping (found
  6865. on page 95 in the code for WP4ImageWaitSpec.u()), and as of now, I don't
  6866. know what order F2 will be processed in, if WPP does its posting processing
  6867. on F2, but I want it to end my wait session.
  6868.  
  6869. I think I have F1 somewhat under control if I want to do my own lookup
  6870. procedure (which is call a dialog box with a picklist for a particular
  6871. field) by placing a procedure name in wpActionProcs.y["PREPLOOKUP"].  But
  6872. I'm having difficulty in adding to the lookup table.  The documentation
  6873. does not seem to talk about manually bringing in another table changing the
  6874. waitspec for different keys and returning control back to WPP.  I stumbled
  6875. through it and have it working to a degree, but it feels clumsy...and what
  6876. does one do about not being able to leave the table until the record is
  6877. posted.  I called PostRecord4.l() (listed as PostRecord.l in the docs) but
  6878. it didn't seem to cure the problem.  I reverted back to my pre WPP days and
  6879. first move to an embedded unlinked 1 field 1 record table before departing
  6880. the form.  Somehow, though, that doesn't "feel" like an "approved" way to
  6881. do it.
  6882.  
  6883. I would opt to forego the inclusion of the source code in the manual in
  6884. lieu of a chapter or two on how to use WPP to its fullest.  Reading the
  6885. source code for the demo scripts just isn't that helpful in understanding
  6886. the underlying concepts and approaches.  Its great to pick apart to get
  6887. specific events under control, but doesn't give me the "why's" and "what's"
  6888. of the process.  I find that viewing the source code in my editor is much
  6889. quicker since I can search for text.
  6890.  
  6891. I think WPP is a great product, and am excited about its potential for me,
  6892. but would appreciate a little more help in using it effectively.
  6893.  
  6894. I am somewhat surprised that the excellent work and style of PAL By Example
  6895. is missing in WPP.  Perhaps you have a "WPP By Example" in the offing?
  6896. Yes? No?
  6897.  
  6898. #: 230272 S13/Addins/Training ·
  6899.     28-May-93  15:18:04
  6900. Sb: WPP4
  6901. Fm: Thomas P Knox 70410,764
  6902. To: Andrew Appell 74007,146 (X)
  6903.  
  6904. How do I:
  6905.  
  6906. 1. Turn off the printer output for the error proc while in development.
  6907.  
  6908. 2. I set wp.y["AppDevelop.l"] = TRUE, how do I get the event display to
  6909.    display?
  6910.  
  6911. 3. While adding entries to one table, a lookup procedure calls a dialog box
  6912.    for a name fill in.  If the name isn't there I move (window select) to
  6913.    the names table to add a new entry.  WPP tells me to press INS to add
  6914.    the record, but when I do, WPP puts me back in the first table.  When
  6915.    departing the first table I:
  6916.  
  6917.      window select wpWindowTagHandles.y["VendorWindow"]
  6918.      window move wpWindowTagHandles.y["VendorWindow"] to 5,10
  6919.      WP4CallTriggers.n("AW,AT,AR,AF")   ; call arrive triggers
  6920.  
  6921. Fm: Andrew Appell 74007,146
  6922.  
  6923.    >>How do I:
  6924.    >>1. Turn off the printer output for the error proc while in
  6925.    development.  The OopsPrint4.u() proc is not sensitive to
  6926.    wp.y["AppDevelop.l"], so the best way would be to copy the WP4Error.n()
  6927.    error procedure to your own name and have it call a version of
  6928.    OopsPrint4.u() without the printer output.  Include a statement in
  6929.    "PrepSetup" or "PrepWait" like:  ERRORPROC = IIF(wp.y["AppDevelop.l"],
  6930.    "MyErrorProc.n", "WP4Error.n")
  6931.  
  6932.    >>2. I set wp.y["AppDevelop.l"] = TRUE, how do I get the event display
  6933.    >>   to display?
  6934.    Press [Ctrl V], or press [Alt F10] or right click on the current window
  6935.    and select "Event Display" from the popup menu.
  6936.  
  6937.    >>3. While adding entries to one table, a lookup procedure calls a
  6938.    >>   dialog box for a name fill in.  If the name isn't there I move
  6939.    >>   (window select) to the names table to add a new entry ...
  6940.  
  6941.    There is an example of adding a new record to a lookup table in Demo 7.
  6942.    The technique can be used as is or sections of WP4AddOneRecord.n() and
  6943.    WP4DepartAddOneRecord.n() may be adapted to the individual situation.
  6944.    There are many uncertainties in this kind of operation which made it all
  6945.    but impossible for us to create a "plug-and-play" routine to do it.  It
  6946.    can be done, though.
  6947.  
  6948. #: 230526 S13/Addins/Training ·
  6949.     31-May-93  15:28:41
  6950. Sb: ClearAll (WPPRO)
  6951. Fm: Jeffrey B Firestone 72240,1044
  6952. To: PAL by Example 71171,1340
  6953.  
  6954. I like the new Wait Plus Pro 4.0.  I do have one major problem.  Most of my
  6955. applications permit the user to view one of many tables while he is editing
  6956. another table.  This is a pop-up type of editting and viewing that is much
  6957. less restrictive than a simple help style pop-up.  There is no easy way to
  6958. make such a recursive call in WPP4.  I would like to be able to issue a
  6959. Snapshot function, do a ClearAll, perform my other processing (perhaps make
  6960. a second call to WPP4.0), and then restore the context from the snapshot.
  6961. This is also very useful for complex reports, adhoc querying, and other
  6962. common tasks that one may wish to perform while viewing/editing a table
  6963. with WPP4.0.
  6964.  
  6965. Fm: John Rendell 70474,377
  6966. To: Jeffrey B Firestone 72240,1044
  6967.  
  6968.    Jeffery - Just put all the tables on the workspace and jump to different
  6969.    tables via Menus or Hotkeys (Or even the internal Image Select in WPP).
  6970.    I have a production app that has 4 MT forms, 6 table views, and 4 hidden
  6971.    tables that work just fine.  User can switch between them as necessary.
  6972.    Note that takes a substantial understanding of the entire WPP mechanism.
  6973.  
  6974. Fm: Thomas P Knox 70410,764
  6975. To: John Rendell 70474,377
  6976.  
  6977.    <<... (Or even the internal Image Select in WPP). >>
  6978.  
  6979.    What is an "internam Image Select"?  Thanks
  6980.  
  6981. Fm: Andrew Appell 74007,146
  6982. To: Thomas P Knox 70410,764 (X)
  6983.  
  6984.    >>What is an "internal Image Select"?  Thanks
  6985.  
  6986.    I think John is referring to the list of windows presented by choosing
  6987.    WindowSelect... from the System Menu.
  6988.  
  6989. Fm: Steve Erbach (NEWPALS) 70620,3432
  6990. To: Jeffrey B Firestone 72240,1044
  6991.  
  6992.    >> Most of my applications permit the user to view one of many tables
  6993.    while he is editing another table.  This is a pop-up type of editting
  6994.    and viewing that is much less restrictive than a simple help style
  6995.    pop-up.  There is no easy way to make such a recursive call in WPP4. <<
  6996.  
  6997.    Sounds like this sort of capability is embodied in Demo 4 in WPP4 where
  6998.    about 10 windows are active all at the same time.  Each one is assigned
  6999.    a set of rights to disallow or allow editing as you choose and the user
  7000.    is able simply to click on any of the windows or use the System menu to
  7001.    choose which window s/he wants to visit.
  7002.  
  7003.    I'm a bit confused as to how your method of pop-up editing/viewing
  7004.    qualifies as recursive.  Isn't it just context-sensitive and
  7005.    event-driven?
  7006.  
  7007.    The Snapshot capability you mention sounds like Demo 6.
  7008.  
  7009. Fm: Andrew Appell 74007,146
  7010. To: Steve Erbach (NEWPALS) 70620,3432 (X)
  7011.  
  7012.    I think what Jeffrey means by "Snapshot" is the ability to store the
  7013.    entire workspace, ClearAll, and then be able to restore it exactly as it
  7014.    was.
  7015.  
  7016.    Demos 5 and 6 illustrate that WaitPlus will automagically restore form
  7017.    windows that Paradox has blown away as a result of form conflicts.  A
  7018.    "global" Save and Restore, however, is not currently available in WPP4
  7019.    since we're trying to discourage that approach.
  7020.  
  7021. Fm: Andrew Appell 74007,146
  7022. To: Jeffrey B Firestone 72240,1044
  7023.  
  7024.    I see two distinct issues in your message.
  7025.    1) Allowing the user to select a new table to edit which you must then
  7026.       make available to them, presumably under WaitPlus control.
  7027.  
  7028.       Provided the list of tables which they can choose from is fixed and
  7029.       the number of them is less than say 20, the preferred way would be to
  7030.       load them off screen (i.e. 1000, 1000) as part of the WPP setup proc
  7031.       with CanArrive = False and with the WPP TableRights set for the edit
  7032.       session until needed, then moved into position and CanArrive reset to
  7033.       True.  Even if it was possible to "snapshot", clearall and restore
  7034.       the original session, this method would provide the best performance,
  7035.       by far.
  7036.  
  7037.    2) Doing querying and reporting from within a WaitPlus session.
  7038.  
  7039.    While CLEARALL between queries is the surest way of keeping one query
  7040.    from interfering with the next, I have never run into a situation where
  7041.    it was impossible to keep track of the query images placed and the
  7042.    resulting "Answer", "Inserted", etc. tables, and clear them individually
  7043.    leaving the tables/forms involved in the WP session intact.
  7044.  
  7045.    Again, a little more work to clear these other images one by one is a
  7046.    lot better than the overhead to store the parameters for all windows on
  7047.    the desktop and then restore them (including updating with new handle
  7048.    the windows will have when created again).
  7049.  
  7050. Fm: Thomas P Knox 70410,764
  7051. To: Andrew Appell 74007,146
  7052.  
  7053.    << them off screen (i.e. 1000, 1000) as part of the WPP setup proc with
  7054.       CanArrive = False and with the WPP TableRights set for the edit
  7055.       session until needed, then moved into position and CanArrive reset to
  7056.       True. >>
  7057.  
  7058.    Why set CanArrive = False and change it to true after the move?  Is this
  7059.    so they can only get there under PAL control?
  7060.  
  7061. Fm: Andrew Appell 74007,146
  7062. To: Thomas P Knox 70410,764 (X)
  7063.  
  7064.    >>Why set CanArrive = False and change it to true after the move?  Is
  7065.    >>this so they can only get there under PAL control?
  7066.  
  7067.    The reason for setting the CanArrive attribute False for windows placed
  7068.    off screen until needed is to make them "invisible" to the user.  That
  7069.    is, they cannot be selected from the Window Select list or moved to when
  7070.    [Ctrl F4] is pressed to cycle through the windows.
  7071.  
  7072. #: 230866 S13/Addins/Training ·
  7073.     02-Jun-93  11:37:18
  7074. Sb: Map /GIS  HELP ! ! !
  7075. Fm: Michael J. Eisworth 71222,3474
  7076. To: Sysop (X)
  7077.  
  7078. Does anyone know of a program that can import Paradox (either for DOS or
  7079. Windows) and can print out a simple U.S. map.  What I am looking for is a
  7080. program that shows where my company has bought real estate.  The
  7081. geographical info doesn't have to be too detailed (basically I would like
  7082. to have a one page print out of the US with dots or symbols in the location
  7083. of deals).
  7084.  
  7085. Fm: Michelle Kelsey (Sysop) 71333,120
  7086.  
  7087.    You may want to consider a product known as GeoGraphics sold by Software
  7088.    Publishers Corp who also produce Harvard Graphics.  The company is
  7089.    located in Santa Clara, CA and can be reached at (408) 988-7518.  There
  7090.    may be other products out there which have similiar functionality, so
  7091.    you may want to check out your local software store.  After working with
  7092.    GeoGraphics I found it easy to use.  By the way, since Paradox can
  7093.    export out as ASCII Delimited, any program which will import ASCII will
  7094.    work.  Good luck,
  7095.  
  7096. Fm: John Strong 70262,2217
  7097.  
  7098.    I am unfamiliar with the product Michelle suggested and it may fit the
  7099.    needs described below.
  7100.  
  7101.    The real issue here is how the information in the Paradox database is
  7102.    going to be used by the geographic program.  Presumably, Paradox is
  7103.    involved because you want to display either a subset of the properties
  7104.    owned or the properties owned change over time.  If this assumption is
  7105.    incorrect, then you should consider a standalone product that allows you
  7106.    to draw points on a map.
  7107.  
  7108.    Interfacing a database and a geographic system requires that the X and Y
  7109.    coordinates you intend to place on the map be stored in the database.
  7110.    But where do you get the coordinates? - that is the real question.
  7111.  
  7112.    The programs we work with, MapInfo & ArcInfo, could do the job.  But the
  7113.    cost might be prohibative.  MapInfo will get your job done for
  7114.    approximately $2,000 - a little more if you buy the programming
  7115.    language.
  7116.  
  7117. Fm: John B. Moore (TeamB) 71333,1775
  7118.  
  7119.    I collected a brochure at the conference that sounds like it would be of
  7120.    interest to you, if you have a fax number I can fax it to you...
  7121.  
  7122. #: 230929 S13/Addins/Training ·
  7123.     02-Jun-93  14:44:19
  7124. Sb: WPPRO BufferStuff
  7125. Fm: Thomas P Knox 70410,764
  7126. To: Andrew Appell 74007,146
  7127.  
  7128. I'm trying to use the WP4EventBufferStuff.u().  It executes, but the INS
  7129. doesn't get processed.  I've tried returning 0 and 10 with the same result.
  7130. The following code is in a table arrival procedure:
  7131.  
  7132.         case table() = "Vendor":       ; from lookup add vendor
  7133.             dynarray event.y[]
  7134.             event.y["TYPE"] = "KEY"
  7135.             event.y["KEYCODE"] = -82   ; insert
  7136.             WP4EventBufferStuff.u(event.y)
  7137.             return 0
  7138.  
  7139. Also, I couldn't find a discussion of using the return value of 10 in the
  7140. manuals.  Did I miss it somewhere?  Thanks.
  7141.  
  7142. #: 230951 S13/Addins/Training ·
  7143.     02-Jun-93  17:06:47
  7144. Sb: WPP4.0 Lookup Table Help
  7145. Fm: Steve Maziarz 71774,1131
  7146. To: ALL
  7147.  
  7148. OK, I've been reading all the messages here about Wait Plus Pro and let me
  7149. be yet another voice in the night crying for a more complete tutorial on
  7150. how to merge WaitPlus into an already existing application as well as more
  7151. complete information on the ins & outs of how to use it.
  7152.  
  7153. But for now, I have what seems to be a rather simple and common question.
  7154. When the user presses [F1] for a Lookup table, I want to be able to display
  7155. the appropriate table in a nice formview, as opposed to the default and
  7156. rather plain tableview.
  7157.  
  7158. I've already done some experimentation on changing the actionprocs for
  7159. "PREPLOOKUP" & friends, but I'm still left with the typical Paradox
  7160. problems of being in CoEdit mode, having to post the record before I can
  7161. move off the table, etc. When I bought WaitPlusPro recently, I was hoping
  7162. it would have some common procs already defined to help out with such
  7163. scenarios. I'm tired of working around Paradox's paradoxes.
  7164.  
  7165. Is there a proc I can call that will preserve the state of the table I'm on
  7166. and let me move off the table, handling all the stupid things you have to
  7167. with Paradox? Please point me in the right direction.
  7168.  
  7169. Fm: Thomas P Knox 70410,764
  7170.  
  7171.    What I do to avoid the "post record..." problem to move off the multi
  7172.    table form is:
  7173.  
  7174.     - create a one field, one record table, the one record can contain any
  7175.       value (mine is an A1 with a space), but it must contain a value.
  7176.     - embedd this table unlinked on you master table.
  7177.     - moveto this table first, and then you can go to any other window you
  7178.      like without that annoying beep and error message.
  7179.  
  7180.    When you return to this window (form) you will return to the master table
  7181.    and not the "dummy" table.
  7182.  
  7183. Fm: Andrew Appell 74007,146
  7184. To: Steve Maziarz 71774,1131
  7185.  
  7186.    >>But for now, I have what seems to be a rather simple and common question. When
  7187.    >>the user presses [F1] for a Lookup table, I want to be able to display the
  7188.    >>appropriate table in a nice formview, as opposed to the default and rather
  7189.    >>plain tableview.
  7190.  
  7191.    Common, yes; simple, not entirely.  As you know, Paradox has no built-in
  7192.    provision for this, so we have to create our own.  One of the procedures
  7193.    included in WP4 is WP4LookupSelect.n() which, in addition to handling the
  7194.    WAIT TABLE during normal lookup help and fill, may be called independently
  7195.    by you to create a pseudo-lookup using a table or form that is not a
  7196.    valcheck lookup.
  7197.  
  7198.    As for those nasty issues of posting/deleting a detail and unlocking the
  7199.    master before being allowed out of the form - if Paradox requires it,
  7200.    there's no way WaitPlus can work around it.  You have been given the
  7201.    suggestion to move to an unlinked detail to get out of the form without
  7202.    unlocking the master record.  While this is true, if you were on a linked
  7203.    detail record originally, it would have been posted by moving off it, so
  7204.    this technique does not solve all the issues.
  7205.  
  7206.    As for the "lookup form", in your PrepLookup procedure:
  7207.       ECHO OFF
  7208.       ;
  7209.       ; Code to get out of the table/form when [F1] has been pressed.
  7210.       ;
  7211.       WINDOW SELECT wpWindowTagHandles.y["MyLookupForm"]
  7212.       WINDOW MOVE wpWindowTagHandles.y["MyLookupForm"] TO 1,0  ; or whereever
  7213.       n = WP4LookupSelect.n()   ; Wait for [F2] or [Esc].
  7214.       ECHO OFF
  7215.       IF n = -60 THEN
  7216.          COPYTOARRAY lookup.r
  7217.       ENDIF
  7218.       WINDOW MOVE wpWindowTagHandles.y["MyLookupForm"] TO 1000,1000 ;off screen
  7219.       WINDOW SELECT wpWindowTagHandles.y["OriginalDataTable"]
  7220.       WP4CallTriggers.n("AW")     ; Restore normal prompt, menu and waitspec.
  7221.       ;
  7222.       ; Code to restore your original position in detail table, record number,
  7223.       ; current field, etc.
  7224.       ;
  7225.       IF n = -60 THEN
  7226.          [] = lookup.r[2]   ; fill in fields as needed
  7227.       ENDIF
  7228.       RETURN 1   ; Don't process [F1] key any further.
  7229.  
  7230. #: 231219 S13/Addins/Training ·
  7231.     03-Jun-93  20:01:44
  7232. Sb: Lockdump
  7233. Fm: Dave Eden 75130,431
  7234. To: David R. Faulkner 76116,3513
  7235.  
  7236. I've been testing your Lockdump program and have a question (please
  7237. bear with me if it seems elementary).  Using the sample Lockdump output
  7238. below:
  7239.  
  7240.   1 EVENTS
  7241.      Session = 557 User=Sue      PFL on DB
  7242.   2 EVENTS
  7243.      Session = 557 User=Sue      FL on family 1
  7244.   3 EVENTS
  7245.      Session = 557 User=Sue      PFL on F2
  7246.  
  7247. From this display, we see a PFL on the table and a PFL on the form.  What
  7248. is the FL (full lock?) on the family?  I see this FL with a different family
  7249. number for each user; what does this mean?
  7250.  
  7251. Fm: DAVID R FAULKNER 76116,3513
  7252.  
  7253.    I hate to admit it but your guess is as good as mine.  In the .lck file
  7254.    (this does not apply to 4.0 btw), I ran across these locks that I did
  7255.    not know how to decode.  The actual lock type (FL or PFL in some cases)
  7256.    I am interperting as if it were a regular lock.  The 'on family' is just
  7257.    there cause I had to put something there.  The number that follows the
  7258.    on family comes directly from the .lck file.  I don't know why these
  7259.    entries are in the .lck file, any ideas?  Borland folks fell free to
  7260.    jump in and clear this up. DrF
  7261.  
  7262. #: 231265 S13/Addins/Training ·
  7263.     03-Jun-93  23:45:07
  7264. Sb: How 2 in PaintPal?
  7265. Fm: Karl Thompson 72366,306
  7266. To: Ted Rosenberger 70313,1610 (X)
  7267.  
  7268. First thanks for a wonderful product! I've been using PaintPal for just 2 days
  7269. and already it has helped me improve the looks of my apps.
  7270.  
  7271. The question that I have has as much to do with dialog boxes as it does with
  7272. PP. I hope you don't mind. What would be the best way to set up a dialog box
  7273. that does the following:
  7274.  
  7275. Select a record from a picklist. The picklist is displaying the value of a
  7276. particular field. Then once the record is selected, initialize other fields in
  7277. the dialog box so that they can be edited. (What would really be neat is if
  7278. the "other fields" would be constantly updated as the user scrolls through the
  7279. pick list. (I don't want the user to be able to edit the field that was used
  7280. to select the record, but it should always be displayed.)
  7281.  
  7282. Fm: Ted Rosenberger 70313,1610
  7283.  
  7284.    You're right, the functionality you're looking for has nothing to do with
  7285.    PaintPAL.
  7286.  
  7287.    However, you should easily be able to achieve the desired behavior by
  7288.    writing a Dialog Proc for the dialog box.  Have you written any dialog
  7289.    procs yet?
  7290.  
  7291.    The basic idea would be to trap for the update trigger.  You'd have the
  7292.    table on the workspace and whenever your dialog proc gets an update
  7293.    trigger where the tag is the tag of the picklist, you'd do a locate
  7294.    based on the new value of the picklist (extract the value of the
  7295.    picklist using the ControlValue function), and then load the accept line
  7296.    To Variables with the new values and call the REFRESHDIALOG command (or
  7297.    REFRESHCONTROL for each appropriate accept line).  A "Save" button could
  7298.    be defined to write the values back to the table, you you could do it
  7299.    "live" each time you get an update trigger on a field.
  7300.  
  7301.    That's all the hints I'll give.  You'll learn a lot by struggling through
  7302.    getting this to work.  Call us if you have more questions (215) 820-9918.
  7303.  
  7304.    Glad you like PaintPAL!  Tell your colleagues!
  7305.  
  7306. #: 231485 S13/Addins/Training ·
  7307.     05-Jun-93  02:57:24
  7308. Sb: WWP
  7309. Fm: Thomas P Knox 70410,764
  7310. To: Alan Zenreich 71171,1340 (X)
  7311.  
  7312. I went back into ScriptGen to modify the workspace setup.  I saved it and
  7313. regenerated the script.
  7314.  
  7315. Now when I call WPP, it sets up the workspace, and immeadiately clears
  7316. everything away and quits as if I pressed escape to quit.
  7317.  
  7318. Where do I look for the problem?
  7319.  
  7320. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  7321.  
  7322.    Do you know if the desktop is setting up successfully?  Generally, if a
  7323.    desktop cannot be set up at run time, WPP will display a dialog box
  7324.    telling you what part of the desktop is missing (e.g, a password
  7325.    protected table, wrong sort order, etc.)
  7326.  
  7327.    Is the setup procedure returning a TRUE value?  If not, WPP will take it
  7328.    as a signal that the setup was not successful and "clean up" on its
  7329.    own.
  7330.  
  7331.    The ScriptGen facility writes a RETURN TRUE after the last call to
  7332.    wp4Setup.l(), but some folk inadvertantly remove the line when moving the
  7333.    code to their own scripts.
  7334.  
  7335.    Another thing that might revoke the WPP session is something that your
  7336.    code in an action point may be doing that ends the WAIT session.  If
  7337.    the original setup proc is ok, could you place messages in some of the
  7338.    early action points "PrepSetup", "PrepWait" and "ArriveWait" and see how
  7339.    far you get by monitoring the messages.
  7340.  
  7341.    Let me know what you find out.
  7342.  
  7343. Fm: Thomas P Knox 70410,764
  7344. To: Alan Zenreich (ZS/PBE) 71171,1340
  7345.  
  7346.    I owe you an apology on this one.  It had nothing to do ScriptGen.  At
  7347.    the same time I modified the workspace, I made a _slight_ change in
  7348.    the procedure being called in "PrepWait".  The "Return 0" got eliminated
  7349.    and so the proc was setting retval to true instead of 0.
  7350.  
  7351.    All's better and working well.  I still think WPP will an indespensible
  7352.    item, but I didn't anticipate the learning curve.
  7353.  
  7354.    One thing I think that would have been helpful is, if the code for each
  7355.    of the demo apps had its code listed separately instead of all eight
  7356.    apps rolled into one set of procedures.  It would make it easier to
  7357.    follow what was happening, particularly learning how to use WPP more
  7358.    effectively.
  7359.  
  7360. #: 231205 S13/Addins/Training ·
  7361.     03-Jun-93  17:40:55
  7362. Sb: WPStuffBuffer
  7363. Fm: Thomas P Knox 70410,764
  7364. To: Andrew Appell 74007,146
  7365.  
  7366. In my table arrival procedure I have:
  7367.  
  7368.     switch
  7369.         case table() = "Vendor":
  7370.             dynarray event.y[]
  7371.             event.y["TYPE"] = "KEY"
  7372.             event.y["KEYCODE"] = -82   ; insert
  7373.             WP4EventBufferStuff.u(event.y)
  7374.  
  7375.         case table() = "Enterpay":
  7376.             if not recordstatus("new") then
  7377.                 dynarray event.y[]
  7378.                 event.y["TYPE"] = "KEY"
  7379.                 event.y["KEYCODE"] = -82
  7380.                 WP4EventBufferStuff.u(event.y)
  7381.             endif
  7382.  
  7383.     endswitch
  7384.  
  7385. When I arrive on the "Enterpay" table, I get the INS as expected, when I
  7386. arrive on the "Vendor" table, I don't get the INS.  What do I look for as
  7387. the source of the problem?
  7388.  
  7389. By the way, has any one mentioned that a tutorial on how WPP works would
  7390. be _EXTREMELY_ useful?
  7391.  
  7392. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  7393.  
  7394.    What does the TABLE() function return when you arrive on the Vendor
  7395.    table?  If is simply "Vendor" or is there a drive spec, path, etc?
  7396.  
  7397. Fm: Thomas P Knox 70410,764
  7398.  
  7399.    The table() returns the correct name of the table, and the
  7400.    WPStuffBuffer() function is called, but it completes with no insert.
  7401.    What do I look for as the problem?
  7402.  
  7403. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  7404.  
  7405.    Could you call me at 201-261-3325 and we'll chat about your code.
  7406.  
  7407. #: 231502 S13/Addins/Training ·
  7408.     05-Jun-93  10:45:12
  7409. Sb: #231306-WPStuffBuffer
  7410. Fm: Ted Rosenberger 70313,1610
  7411. To: Alan Zenreich (ZS/PBE) 71171,1340 (X)
  7412.  
  7413. I've been trying to get to the bottom of a problem that I've been having in an
  7414. app for a while.  Have you run across the vague multi-user PAL error that DOES
  7415. call the errorproc: "Record Was Changed".  We think it is a Paradox 4.0, 4.01,
  7416. and 4.02 bug with refreshing since using the REFRESH command liberally in the
  7417. app seems to minimize the problem.  (The app currently runs in compatible
  7418. mode.)
  7419.  
  7420. #: 231497 S13/Addins/Training ·
  7421.     05-Jun-93  10:07:47
  7422. Sb: WP4 Help
  7423. Fm: Tucker Brawner 73455,1440
  7424. To: Andrew Appell
  7425.  
  7426. Your last advice was helpful and my problem seems to have generated some
  7427. request s for a brief "cookbook" cycle of development.  I urge you to
  7428. pursue this.
  7429.  
  7430. Current question...I want to do an ARRIVEFIELD/DEPARTFIELD proc but manual
  7431. says to use these, you must activate them in ARRIVEWINDOW (or table?).
  7432. Short of this cryptic advice, I don't know where to look for specifics on
  7433. activating these procs.
  7434.  
  7435. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  7436.  
  7437.    I'd like to get a better handle on what kind of a cookbook you'd like.
  7438.    Could you, and some other folk give us a table of contents?
  7439.  
  7440.    Do you think folk would actually spend time reading it?  I'd like to
  7441.    think so, but in reality very few folk actually read program manuals
  7442.    before diving right in (and getting themselves pretty confused).
  7443.  
  7444.    I'm one of the manual-readers, but there are very, very few of us.  We
  7445.    put a lot of work into the documentation for WPP, the most complete set
  7446.    ever.  However, if we can add some pages, or a separate booklet that
  7447.    will make it easier for the users, I'm all for it..... but we're still
  7448.    not sure what is needed/wanted.  So, speak up...... by the way, also
  7449.    speak up with your success stories with the product.  We hear from
  7450.    developers all the time who are completing projects way ahead of
  7451.    schedule, but they don't post those kinds of messages on the forum.
  7452.  
  7453.    Like Paradox, WPP is very flexible, and folk can use it to whatever
  7454.    level they are comfortable. However, some of the built in WPP
  7455.    functionality is not for the novice. For example, one user wanted to
  7456.    know why it was so convoluted to add a record to a lookup table in WPP.
  7457.    The reason is that Paradox makes it very difficult to do, and the fact
  7458.    that WPP includes this feature does not mean that it is to be used by
  7459.    inexperienced WPP programmers.
  7460.  
  7461.    On the other hand, it's always tempting for those new to the product to
  7462.    attempt some of the more esoteric features because their application
  7463.    seems to demand it.  Sometimes they get a little frustrated because they
  7464.    can't tell exactly what WPP is doing at a given time.  That's why we
  7465.    supply the source code.... so you can follow along with the "home game"
  7466.    version.  The source code is heavily annotated, and explains the whys
  7467.    and wherefores of the bizzare hoops that we had to jump throught to give
  7468.    you a stable product that does what you need to do.  We estimate that
  7469.    over 30% of the code is getting around what David Letterman might call
  7470.    "Stupid Paradox Tricks".
  7471.  
  7472.    So, after having spent so much time writing, debugging, and documenting
  7473.    the program, we are careful about adding to the paper load.  Then again,
  7474.    most alpha and beta testers had no documentation at all...... they only
  7475.    had the source code, and they developed complete applications......  go
  7476.    figure!
  7477.  
  7478. Fm: Don Schubert (TeamB) 70007,4654
  7479.  
  7480.    I think what they are asking for is a simple, but complete tutorial that
  7481.    takes them from beginning to end in creating/converting an app with WPP.
  7482.    Perhaps something like the simple app in Celeste's "Best of". I'm
  7483.    hearing a lot of "can't see the forest for the trees" comments in these
  7484.    msgs...
  7485.  
  7486. Fm: Craig Jones (TeamB) 73627,2320
  7487. To: Alan Zenreich (ZS/PBE) 71171,1340
  7488.  
  7489.    The program I just released (The CLAW -- an Application Workshop add-on) 
  7490.    has a quick-reference card and a matching chapter in the manual that is 
  7491.    organized by subject:
  7492.  
  7493.        Effect to be Achieved           How to do it
  7494.        ---------------------           ----------------------------
  7495.        Menus
  7496.                Create "sticky" menus   (1) Use the M/A->PAL funcntion...
  7497.                                        (2) Split up the app into subapps...
  7498.                Launch an App from...   See the DEMO.SC example...
  7499.        Multi-Actions
  7500.                Convert to PAL          Play CLAWUTIL and choose...
  7501.        Queries
  7502.                Fix up mismatches       CoEdit the CFG\OBJECTS table...
  7503.  
  7504.    Maybe this sort of format is what Tucker has in mind?
  7505.  
  7506. Fm: Thomas P Knox 70410,764
  7507. To: Alan Zenreich (ZS/PBE) 71171,1340
  7508.  
  7509.    What I found missing in the manuals was the basic "How-To" use WPP in an
  7510.    application.  You are correct that the code is very well commented and
  7511.    explains the all the problems and their solutions.  This is very useful 
  7512.    and necessary.
  7513.  
  7514.    Since the term "Cookbook" was used in the parent message, let me reuse it
  7515.    here as an analogy.  You have developed a series of excellent and complex
  7516.    "recipes" that I as a budding chef would like to put to good use.  
  7517.    However there is no discussion as to how to put together a an equally 
  7518.    successful "bill-of-fare" (I intentionally avoided using the word 
  7519.    "menu").
  7520.  
  7521.    I know that that type of discussion would involve some discussion of the 
  7522.     new Event Model, but that's not what I'm looking for.  I consider 
  7523.    myself a fairly competent programmer and I understand the Event Model.  
  7524.    I have done one major application in 4.0 and developed my own (limited) 
  7525.    event handling/dispatching routine that works quite well for this one 
  7526.    application.  From this, I can really appreciate the amount of time and 
  7527.    effort that went into WPP, and realize how useful it will be.  But I 
  7528.    can't seem to find anything in the manuals that tell me how to really 
  7529.    get the most from it.
  7530.  
  7531.    The demo apps illustrate some of the power and flexibility of WPP, but 
  7532.     there is no discussion of how it was implemented to solve those 
  7533.    problems.  True, you can study the source code, but all eight apps are 
  7534.    tossed in together.  It is difficult to glean why you did what you did 
  7535.    for any particular demo app.  Particulary with respect as to how to 
  7536.    effectively use the wpActionProcs[].
  7537.  
  7538. Fm: Steve Maziarz 71774,1131
  7539. To: Thomas P Knox 70410,764
  7540.  
  7541.    Alan, I think that the last paragraph of Tom Knox's message is most 
  7542.    appropriate to my case. I see from the demos that all the features I 
  7543.    need are there and have attempted to sort them out from the demo's but 
  7544.    the fact that all demos are grouped together makes this difficult. See 
  7545.    my other message I'm posting today for a detailed plea for HELP. I'm 
  7546.    totally new to Wait Plus and it came HIGHLY recommended from many users 
  7547.    I spoke to. So, that's why I bought it. However, I've been having on 
  7548.    heck of a time getting it to do its tricks.
  7549.  
  7550.    I have read the manual, and have even been forced into DEBUGGING the 
  7551.    sample apps to see what actually goes on. However, this is a very time 
  7552.    consuming process and I've gotten confused on more than one occassion 
  7553.    (as is the case right now). As an example of what should be included in 
  7554.    a "cookbook" for WPP, you might try a Q & A format. Here's one of my 
  7555.    Questions:
  7556.  
  7557.    What must I do to display a FORMVIEW of a LOOKUPTABLE and let the user 
  7558.    make a choice from there?
  7559.  
  7560.    One obvious thing I learned is that once I get to the FORMVIEW, I should 
  7561.    call WPLookupSelect.n() and let it handle the interaction with the user. 
  7562.    However, just getting to the FORMVIEW is my current problem. Your DEMO 5 
  7563.    illustrates how WaitPlus will restore windows that Paradox "nixes", but 
  7564.    I can't seem to get it to do that for me. See my message "WPP FORM 
  7565.    LOOKUP" for details.
  7566.  
  7567. Fm: JOHN RENDELL 76366,770
  7568.  
  7569.    WPP is extremely powerfull - but as it has been pointed out before, if 
  7570.    you dont know how to drive, dont start with an Indy car...  As you have 
  7571.    pointed out (Both on the form and in the Wpp manuals) you should know 
  7572.    PAL and Interactive Paradox very well before trying to 'control' 
  7573.    WaitPlus.
  7574.  
  7575.    WPP has saved me many many hours (With version 2.0, I tossed out 6000 
  7576.    lines of code that I was using for 'generic' data entry sessions - I 
  7577.    tossed 8000 lines when I received 4.0).  However, it has been very 
  7578.    frustrating to use sometimes because I dont fully investigate what my 
  7579.    actions will do.  I all to often try to 'beat it with a hammer' because 
  7580.    it has to be done yesterday.  This leads to many forced Wpp behavior 
  7581.    elements that cause problems as I modify the application latter.
  7582.  
  7583.    Like you, I am a manual reader - I usually read the manuals for products 
  7584.    I purchase at least 2 times cover to cover before using them (shoot, I'm 
  7585.    on the 30+ reading of the ObjectPal Developers Reference <G>).   I found 
  7586.    the documentaion to be very helpfull, but still lacking in the 'nuts and 
  7587.    bolts'.
  7588.  
  7589.    The best example of the lacking is in the WP4AddOneRecord.n() proc.  If 
  7590.    you try to trace through the example of this, you can get lost quickly 
  7591.    unless you have spent a LOT of time with the inner workings of Wpp.  The 
  7592.    docs on page 62-63 give some insight,  but there could be more 
  7593.    information in terms of what is really going to happen.  It took me 3 
  7594.    days to really understand what happens when this procedure is called.  
  7595.    Things like "Should I explicitly call any triggers?", "What error 
  7596.    checking is NOT done?", What should I NOT do to disrupt any of 
  7597.    WaitPlus's internals?"
  7598.  
  7599.    On the other hand, there is Page 56.  The Updating Variables to Reflect 
  7600.    PAL Movments section is a must read for any customization.  This tells 
  7601.    you what you need to do if you bypass/override any of the WaitPlus 
  7602.    standard mechanisims.
  7603.  
  7604.    To sum it up, the product is a Must Have - I've used it for the last 3 
  7605.    years in EVERY app that I have put out.  WPP 4.0's documentation is the 
  7606.    best yet.  However, with all of the new 'features' of Paradox and 
  7607.    WaitPlus, there is a steep learning curve.  I dont know if a cookbook 
  7608.    would be appropriate, but maybee a tips/traps guide.
  7609.  
  7610. #: 231681 S13/Addins/Training ·
  7611.     06-Jun-93  19:27:27
  7612. Sb: #230936-BufferStuff
  7613. Fm: Andrew Appell 74007,146
  7614. To: CHRIS BORGERS 73207,1467
  7615.  
  7616. At the bottom of WP4CallEvents.n() is a summary of the possible return values:
  7617.  
  7618.  ; n = 0  : Process the current event and continue trigger cycle.
  7619.  ; n = 1  : Deny the current event; end trigger cycle but stay in the WAIT.
  7620.  ; n = 2  : Deny the current event; end trigger cycle and end the WAIT.
  7621.  ; n = 10 : Deny the current event but allow any buffer events to be processed.
  7622.  RETURN n
  7623.  
  7624. Basically, unless you have buffered any events to take place when control
  7625. returns to the wait proc, returning 10 is the same as returning 1 -
  7626. the current event will be denied and trigger cycle will be ended.
  7627.  
  7628. #: 231660 S13/Addins/Training ·
  7629.     06-Jun-93  15:25:58
  7630. Sb: WPP FORM LOOKUP
  7631. Fm: Steve Maziarz 71774,1131
  7632. To:  71171,1340
  7633.  
  7634. HELP! I'm working with Wait Plus Pro 4.0 and am a NEW USER of same. In looking
  7635. at the DEMOS provided, I saw two very useful features which I have been trying
  7636. to take advantage of. These are: 1) In DEMO 5, Wait Plus Pro's ability to
  7637. restore FormWindows which Paradox deletes because they are forms from a table
  7638. which has an embedded form in the table I'm currently working with. 2) The
  7639. ability to add records to a lookup table under the same scenario, where
  7640. another form from the lookup table is an embedded form in the table your
  7641. working with.
  7642.  
  7643. What I'm trying to do is what I consider to be a very common need: The ability
  7644. to present a FORMVIEW of a LOOKUP table during an editing session. Does anyone
  7645. have or could someone provide a GENERIC procedure that would show how to do
  7646. this?
  7647.  
  7648. I currently have a procedure defined which is attached to the ARRIVELOOKUP
  7649. action so that I can grab the name of the Lookup Table. All seems to go well
  7650. until I attempt to switch to the FORMVIEW of the lookup table which was
  7651. already placed on the workspace during the Setup procedure. When I try to do:
  7652.  
  7653.    WinHandle=wpWindowTagHandles.y["TAG.FRM.DEPT"]
  7654.    WINDOW SELECT WinHandle
  7655.  
  7656. I get an error saying that this is a bad window handle. I even tried setting a
  7657. PREPLOOKUP action point and checking for the formview window of the lookup
  7658. table, however it isn't there. Also, when I first get into the edit session, I
  7659. am presented with the FORMVIEW of the "EMPLOYEE" table despite setting
  7660. wp.y["InitView.a"]="TABLE".
  7661.  
  7662. Obviously, I'm doing something wrong, but I'm not sure what. Any help on this
  7663. would be appreciated.
  7664.  
  7665. Fm: Andrew Appell 74007,146
  7666.  
  7667.    I responded to an earlier message from you in which I outlined the steps to
  7668.    do a "form lookup" but I'll go into some more detail as to why a
  7669.    plug-and-play routine to do this is not part of WaitPlus.
  7670.  
  7671.    The code to do this for a *specific* situation is not very difficult to
  7672.    write.  However, since this is not a valcheck lookup, leaving the current
  7673.    record and form will be necessary (which will in most cases involve
  7674.    unlocking/posting the record).
  7675.    A side effect of this would be the possibility of another user
  7676.    coming along and locking the master or detail that you just left.
  7677.  
  7678.    There is no way for us to know, *generically*, the steps that may
  7679.    be required for you to keep control of the record during the "lookup"
  7680.    interaction in your situation, or what action you want to take place if
  7681.    another user has managed to steal the record.
  7682.    (Assuming you are even trying to keep the record under control and not
  7683.    just relying on the laws of probability that, most likely, no one will lock
  7684.    the record out from under you.  Two common techniques involve using a
  7685.    [Lock] field in the table or a semaphor lock to inform other users
  7686.    that the record is in use by someone.)
  7687.  
  7688.    Believe me, the difficulty involved in providing features that we thought
  7689.    would be of benefit to WP4 users was never a factor.
  7690.    (I direct your attention to WP4RestoreFormWindows.u() and WP4FormSwitch.l(),
  7691.    two routines that even we shake our heads at amazement - because they are
  7692.    so bizarre, were so hard to write, were so necessary...
  7693.    and because they work - all the time.)
  7694.    The only issue was our ability to grasp the nature of the feature and
  7695.    whether it could be written generically - so it would work first time,
  7696.    every time regardless of the situation.
  7697.  
  7698.    >>I get an error saying that this is a bad window handle. I even tried setting
  7699.    >>a PREPLOOKUP action point and checking for the formview window of the lookup
  7700.    >>table, however it isn't there.
  7701.  
  7702.    From the sound of it, I would say that at the point where you have left the
  7703.    master record of the form in which you are doing the lookup you need to
  7704.    switch to table view and make an explicit call to WP4RestoreFormWindows.u()
  7705.    to re-create the "TAG.FRM.DEPT" form window before selecting it.
  7706.  
  7707.    >>Also, when I first get into the edit session, I
  7708.    >>am presented with the FORMVIEW of the "EMPLOYEE" table despite setting
  7709.    >>wp.y["InitView.a"]="TABLE".
  7710.  
  7711.    You must also set wp.y["InitImage.n"] = 1  ; or whatever image number.
  7712.  
  7713. Fm: Steve Maziarz 71774,1131
  7714.  
  7715.    Thanks for the "magic" WP4RestoreFormWindows.u and your other "generic"
  7716.    form lookup routine. Just a note that I saw no reference to the above
  7717.    procedure in the manual and obviously didn't trace far enough into the
  7718.    code to find it.
  7719.  
  7720.    Might I suggest that in any "supplement/cookbook" that is published, your
  7721.    messages to me be included.
  7722.  
  7723.    I can certainly appreciate the amount of code & hassle you guys went
  7724.    through to bring such a needed procedure to fruition. I couldn't
  7725.    believe my eyes when I watched DEMO 5. Thanks again, PAL By Example
  7726.    support - both phone & CIS - is top notch !
  7727.  
  7728. Fm: Steve Maziarz 71774,1131
  7729. To: Alan Zenreich 71171,1340 (X)
  7730.  
  7731.    Alan, I think that the last paragraph of Tom Knox's message is most
  7732.    appropriate to my case. I see from the demos that all the features I need are
  7733.    there and have attempted to sort them out from the demo's but the fact that
  7734.    all demos are grouped together makes this difficult. See my other message I'm
  7735.    posting today for a detailed plea for HELP. I'm totally new to Wait Plus and
  7736.    it came HIGHLY recommended from many users I spoke to. So, that's why I bought
  7737.    it. However, I've been having on heck of a time getting it to do its tricks.
  7738.  
  7739.    I have read the manual, and have even been forced into DEBUGGING the sample
  7740.    apps to see what actually goes on. However, this is a very time consuming
  7741.    process and I've gotten confused on more than one occassion (as is the case
  7742.    right now). As an example of what should be included in a "cookbook" for WPP,
  7743.    you might try a Q & A format. Here's one of my Questions:
  7744.  
  7745.    What must I do to display a FORMVIEW of a LOOKUPTABLE and let the user make a
  7746.    choice from there?
  7747.  
  7748.    One obvious thing I learned is that once I get to the FORMVIEW, I should call
  7749.    WPLookupSelect.n() and let it handle the interaction with the user. However,
  7750.    just getting to the FORMVIEW is my current problem. Your DEMO 5 illustrates
  7751.    how WaitPlus will restore windows that Paradox "nixes", but I can't seem to
  7752.    get it to do that for me. See my message "WPP FORM LOOKUP" for details.
  7753.  
  7754. #: 231187 S13/Addins/Training ·
  7755.     03-Jun-93  16:21:01
  7756. Sb: OKRecord.n
  7757. Fm: Thomas P Knox 70410,764
  7758. To: Andrew Appell 74007,146
  7759.  
  7760. What is the relationship of wpActionProcs.y["OKRECORD"] = "OKRecord.n" to
  7761. other procedures?
  7762.  
  7763. The manual says it is called "at the end of a DepartRow trigger action".
  7764. Does this mean I need a DepartRow proc to be defined?  In the following:
  7765.  
  7766.       case wpEvent.y["KEYCODE"] = -60:
  7767.           WP4CallTriggers.n("DF,DR")
  7768. with:
  7769.    ;  wpActionProcs.y["DEPARTROW"] = ""             ; commented out
  7770.       wpActionProcs.y["OKRECORD"] = "OKRecord.n"    ; active
  7771.  
  7772. pressing F2, OKRecord.n() is not called.
  7773.  
  7774. If I need a DepartRow procedure defined, the manual doesn't indicate this.
  7775.  
  7776. Fm: Alan Zenreich (ZS/PBE) 71171,1340
  7777.  
  7778.    If you enable the OkRecord trigger, it simply executes after any
  7779.    *attempt* to depart the row on a changed record (but before the depart
  7780.    occurs).  This gives you the opportunity to deny the depart.
  7781.  
  7782.    Typically an OkRecord.n() procedure is used to validate record level
  7783.    changes.  For example, you might not want the user to leave the record if
  7784.    one or more fields are missing, or two fields contradict each other.  In
  7785.    this case the proc should return a 1 which would keep the user on the
  7786.    record.
  7787.  
  7788. Fm: Andrew Appell 74007,146
  7789. To: Thomas P Knox 70410,764
  7790.  
  7791.    >>What is the relationship of wpActionProcs.y["OKRECORD"] = "OKRecord.n" to
  7792.    >>other procedures?
  7793.  
  7794.    >>The manual says it is called "at the end of a DepartRow trigger action".
  7795.    >>Does this mean I need a DepartRow proc to be defined?
  7796.  
  7797.    As Alan has said, OKRecord.n() is only called on a record that has been
  7798.    changed (RECORDSTATUS("Modified") = TRUE).
  7799.  
  7800.    The DEPARTROW trigger procedure internal to WaitPlus will automatically
  7801.    trip the OKRECORD action point whether or not you have any custom code
  7802.    defined for DEPARTROW.
  7803.    So, no you don't need to have any custom DepartRow procedure defined.
  7804.    (If you did, it would be invoked before the OKRecord action point occurred.)
  7805.  
  7806. Fm: Thomas P Knox 70410,764
  7807. To: Andrew Appell 74007,146
  7808.  
  7809.    << The DEPARTROW trigger procedure internal to WaitPlus will 
  7810.       automatically trip the OKRECORD action point whether or not you have 
  7811.       any custom code defined for DEPARTROW. >>
  7812.  
  7813.    So is that to say that WP4CallTriggers.n("DR") will call OKRecord.n()?
  7814.